mmdev 发表于 2013-2-1 12:02:54

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]
查看完整版本: Compatibility with non-GNU compilers