初めに C++ではグローバルな静的変数が宣言されているとmainの前に初期化されます。 GCCには__attribute__((constructor))という拡張があり、この属性を関数の前に付けるとその関数がmainの前に呼ばれます。 それでは両方使うとどういう順序でなるのか? C++的には未定義ですが実験してみました。 単一ファイルにおける順序 #include <stdio.h> static struct X1 { X1() { puts("X1 cstr"); } } x1; static void __attribute__((constructor)) initMain() { puts("initMain"); } static struct X2 { X2() { puts("X2 cstr"); } } x2; int main() { puts("main"); }
