Messages in this thread | | | Date | Tue, 6 Jul 2004 17:06:12 -0700 (PDT) | From | tom st denis <> | Subject | Re: 0xdeadbeef vs 0xdeadbeefL |
| |
--- David Eger <eger@havoc.gtf.org> wrote: > Is there a reason to add the 'L' to such a 32-bit constant like this? > There doesn't seem a great rhyme to it in the headers...
IIRC it should have the L [probably UL instead] since numerical constants are of type ``int'' by default.
Normally this isn't a problem since int == long on most platforms that run Linux. However, by the standard 0xdeadbeef is not a valid unsigned long constant.
Consider the following...
#include <stdio.h> int main(void) { unsigned int x; x = 4; if (x < 0xdeadbeef) printf("hello"); return 0; }
If you run splint on that you get
--- Splint 3.1.1 --- 13 Jun 2004
test2.c: (in function main) test2.c:7:7: Operands of < have incompatible types (unsigned int, int): x < 0xdeadbeef To ignore signs in type comparisons use +ignoresigns
Finished checking --- 1 code warning ---
As far as I know splint follows C99 which means that it thinks the constant is "int".
Tom
__________________________________ Do you Yahoo!? New and Improved Yahoo! Mail - 100MB free storage! http://promotions.yahoo.com/new_mail - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |