6.7 C++-Specific Variable, Function, and Type Attributes
Some attributes only make sense for C++ programs.
In Standard C++, objects defined at namespace scope are guaranteed to be initialized in an order in strict accordance with that of their definitions in a given translation unit. No guarantee is made for initializations across translation units. However, GNU C++ allows users to control the order of initialization of objects defined at namespace scope with the
init_priorityattribute by specifying a relative priority, a constant integral expression currently bounded between 101 and 65535 inclusive. Lower numbers indicate a higher priority.
In the following example,
Awould normally be created before
B, but the
init_priorityattribute has reversed that order:
Some_Class A __attribute__ ((init_priority (2000))); Some_Class B __attribute__ ((init_priority (543)));
Note that the particular values of priority do not matter; only their relative ordering.
This type attribute informs C++ that the class is a Java interface. It may
only be applied to classes declared within an
extern "Java"block. Calls to methods declared in this interface will be dispatched using GCJ's interface table mechanism, instead of regular virtual table dispatch.
See also Namespace Association.