This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Is init_priority file scope or global scope?


"H.J. Lu" <hjl.tools@gmail.com> writes:

> Using .init_array section on Linux/x86 raised a question on
> init_priority.  GCC manual says
>
> `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.
>
> Is init_priority file scope or global scope? I consider init_priority is
> file scope.  Is that a correct assumption?

No.  That would be useless.  init_priority has global scope.  That is
what it was designed for.

The documentation could be more clear, but it is clearly saying "C++
specifies the order in a translation unit, init_priority specifies the
order across translation units."

Ian


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]