2011-09-08 8 views

Respuesta

37

Para que sea más fácil eliminarlo para compilador diferente. Si tiene código portable, hay que eliminarlos para otros compiladores, por lo que

#ifndef __GNUC__ 
#define __attribute__(x) 
#endif 

El problema es que los atributos tienen vario número de argumentos y se puede combinar varios atributos en una __attribute__ declaración, pero C sólo se introdujeron macros variadas en C99. Con doble paréntesis, la definición anterior no necesita macros variadas.

15

probablemente la idea es que puede declarar una macro simple que ayuda a ignorar todo esto en cualquier otro compilador de C y C++. Si no tiene el segundo par de paréntesis, esa macro sería necesariamente una con .... Entonces, para los compiladores que no soportan eso, usted sería atornillado.

Editar: Con esta sintaxis simplemente puede parecerse

#ifdef __GNUC__ 
# define attribute(X) __attribute__(X) 
#else 
# define attribute(X) 
#endif 

y luego se usaría attribute para sus declaraciones de funciones, por ejemplo,

+2

Es un comportamiento indefinido definir un nombre de macro que comience con un doble guión bajo. – dreamlax

+0

@dreamlax, lo sé. No dije que uno debería hacer esto, pero creo que fue la idea detrás de eso. –

Cuestiones relacionadas