グローバル変数は同じコンパイル単位の宣言順序で作成され、作成順序は複数のコンパイル単位間で定義されていないことを知っています。
グローバル変数は、それらが定義されているコンパイルユニットからのコードが呼び出される前に作成されることを少し前に読みました。これは規格で定義されていますか?
例:
file1.cpp
int f1v1 = f1_1();
int f1v2 = f1_2();
void f1(){...}
int f1_1(){...}
int f1_2(){...}
file2.cpp
static int f2v1 = f2_1();
static int f2v2 = f2_2();
int f2_1(){...}
int f2_2(){...}
main.cpp
#include "file1.h"
#include "file2.h"
int main()
{
f1();
return 0;
}
この場合、前後にf1_1()
呼び出される標準によって保証されていますか?file2.cppで定義された関数が呼び出されず、file2.cppの外部に表示されないため、およびがまったく呼び出されないことが標準によって保証されていますか?f1_2()
f1()
f2_1()
f2_2()
f2v1
f2v2
編集:
file1.cppがlib1でコンパイルされ、file2.cppがlib2でコンパイルされる場合の動作は、標準で指定されていますか?