"H.J. Lu" <hjl.to...@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