Compatibility with non-GNU compilers
Fortunately, the __attribute__ mechanism was cleverly designed in a way to make it easy to quietly eliminate them if used on platforms other than GNU C. Superficially, __attribute__ appears to have multiple parameters (which would typically rule out using a macro), but the two sets of parentheses effectively make it a single parameter, and in practice this works very nicely./* If we're not using GNU C, elide __attribute__ */#ifndef __GNUC__#define__attribute__(x)/*NOTHING*/#endifNote that __attribute__ applies to function declarations, not definitions, and we're not sure why this is. So when defining a function that merits this treatment, an extra declaration must be used (in the same file):
/* function declaration */void die(const char *format, ...) __attribute__((noreturn)) __attribute__((format(printf,1,2)));void die(const char *format, ...){/* function definition */}
页:
[1]