C++ Attributes - Using the GNU Compiler Collection (GCC)
Description: Using the GNU Compiler Collection (GCC)

Next: Namespace Association, Previous: Bound member functions, Up: C++ Extensions

### 7.7 C++-Specific Variable, Function, and Type Attributes

Some attributes only make sense for C++ programs.

`init_priority (`priority`)`

  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_priority` attribute 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, `A` would normally be created before `B`, but the `init_priority` attribute 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.

`java_interface`
  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.