Warum verwendet GCCs __attribute__((...)) Syntax doppelte Klammern?

Warum verwendet GCCs __attribute__((...)) Syntax doppelte Klammern?


Die Dokumentation für __attribute__((...)) von GCC Syntax gibt an, dass Attribute in doppelte Klammern eingeschlossen werden müssen, gibt aber keine Begründung für diese Entwurfsentscheidung.


Welcher praktische Grund hätte die Designer von GCC veranlasst, dies zu verlangen? Hat es etwas mit der Behandlung doppelter Klammern durch den Präprozessor zu tun?


Antworten:


Um es einfacher zu machen, es für verschiedene Compiler zu eliminieren. Wenn Sie portablen Code haben, müssen Sie ihn für andere Compiler entfernen, also tun Sie das


#ifndef __GNUC__
#define __attribute__(x)
#endif

Das Problem ist, dass Attribute eine unterschiedliche Anzahl von Argumenten haben und Sie mehrere Attribute in einem __attribute__ kombinieren können -Deklaration, aber C hat in C99 nur variadische Makros eingeführt. Mit doppelten Klammern benötigt die obige Definition keine variadischen Makros.