Я знаю, что глобальные переменные создаются в порядке объявления для той же единицы компиляции, и порядок создания не определяется между несколькими единицами компиляции.
Я прочитал некоторое время назад, что глобальные переменные создаются до того, как вызывается любой код из блока компиляции, где они определены. Определяется ли это стандартом?
Пример:
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()
вызывается до f1_2()
и до f1()
? Гарантируется стандартом, что f2_1()
и f2_2()
вызываются вообще, поскольку не определена никакая функция, определенная в файле2.cpp, и f2v1
и f2v2
не видны вне file2.cpp?
ИЗМЕНИТЬ:
Является ли поведение, указанное стандартом при компиляции файла file1.cpp в lib1, а файл2.cpp скомпилирован в lib2?