GCC Explorer - an interactive take on compilation
Posted May 25, 2012 13:34 UTC (Fri) by vonbrand
In reply to: GCC Explorer - an interactive take on compilation
Parent article: GCC Explorer - an interactive take on compilation
It is almost exactly how gcc handles printf-like functions... from the gcc info:
extern int my_printf(void *my_object, const char *my_format, ...) __attribute__((format(printf, 2, 3))); tells the compiler this function is printf-like. You can also use the attribute
const on a function to express that it only uses the values of the arguments to compute its return value, so the compiler knows it can stash away the value and not recompute it.
So yes, the compiler is pretty smart, and the relevant C standard also says that standard functions can't be just overriden by the user. That is how
printf("Hello, world!\n"); gets replaced (legally) by
puts("Hello, world!\n");. Sure, there are lots of other changes the compiler might legally make, but at some point the extra cost in compiling outweighs the benefits; and some "optimizations" might on average turn out costlier in runtime than just leaving the code as is. As for the next suggestion, "leave it to the programmer via some attribute/special pragma," it has been shown time and again (Jon Bentley's "Writing efficient programs," sadly out of print, has some delightful stories) that programmers are terrible at predicting how to optimize code.
to post comments)