Perché la sintassi __attribute__((...)) di GCC utilizza le parentesi doppie?

Perché la sintassi __attribute__((...)) di GCC utilizza le parentesi doppie?


La documentazione per __attribute__((...)) di GCC la sintassi indica che gli attributi devono essere racchiusi tra parentesi doppie, ma non fornisce una motivazione per questa decisione di progettazione.


Quale motivo pratico avrebbe indotto i designer di GCC a richiederlo? Ha qualcosa a che fare con la gestione delle doppie parentesi da parte del preprocessore?


Risposte:


Per semplificare l'eliminazione per diversi compilatori. Se hai codice portatile, devi rimuoverlo per altri compilatori, quindi lo fai


#ifndef __GNUC__
#define __attribute__(x)
#endif

Il problema è che gli attributi hanno un numero diverso di argomenti e puoi combinare più attributi in un unico __attribute__ dichiarazione, ma C ha introdotto solo macro variadic in C99. Con la doppia parentesi la definizione di cui sopra non necessita di macro variadiche.