Buggifying critical core modules
Buggifying critical core modules
Posted Mar 19, 2008 15:19 UTC (Wed) by tjc (guest, #137)In reply to: Buggifying critical core modules by quotemstr
Parent article: Who maintains dpkg?
> the bit pattern of the pointer is going to be same no matter what -- > provided you pass an actual pointer. This took me by surprise: int main(void) { int n; void *p = &n; printf("%p\n", p); p++; printf("%p\n", p); return 0; } I thought incrementing a void pointer would cause a compiler error (or at least a warning), but it seems to treat it as a char pointer and increment it by one byte on my system (gcc 4.1.2 on Solaris).
Posted Mar 19, 2008 15:26 UTC (Wed)
by dw (subscriber, #12017)
[Link] (1 responses)
Posted Mar 20, 2008 18:34 UTC (Thu)
by dododge (guest, #2870)
[Link]
Buggifying critical core modules
A GCCism:
-Wpointer-arith
Warn about anything that depends on the ``size of'' a
function type or of "void". GNU C assigns these types a
size of 1, for convenience in calculations with "void *"
pointers and pointers to functions.
Buggifying critical core modules
The lesson being: when you run "gcc" with no options, it does not compile the C language, but
rather the "GNU C" language. GNU C bears a strong resemblance to C but has many additional
and alternate semantics.
If you're trying to write portable code and you want gcc to follow Standard C rules, you have
to explicitly request it. I normally use, at a minimum:
-std=c99 -pedantic -Wall -Wextra