¿Por qué la sintaxis __attribute__((...)) de GCC usa paréntesis dobles?

¿Por qué la sintaxis __attribute__((...)) de GCC usa paréntesis dobles?


La documentación para __attribute__((...)) de GCC la sintaxis indica que los atributos deben estar encerrados entre paréntesis dobles, pero no proporciona una justificación para esta decisión de diseño.


¿Qué razón práctica habría causado que los diseñadores de GCC requirieran esto? ¿Tiene algo que ver con el manejo de paréntesis dobles por parte del preprocesador?


Respuestas:


Para que sea más fácil eliminarlo para diferentes compiladores. Si tiene código portátil, debe eliminarlo para otros compiladores, así que lo hace


#ifndef __GNUC__
#define __attribute__(x)
#endif

El problema es que los atributos tienen varios argumentos y puedes combinar múltiples atributos en uno __attribute__ declaración, pero C solo introdujo macros variádicas en C99. Con doble paréntesis, la definición anterior no necesita macros variables.