我在互联网上找到的关于静态初始化顺序失败的一切都是关于C++的,但是如果我初始化一些类型的全局变量,比如
struct Foo {
int flag;
pthread_key_t key;
void *ptrs[10];
};
I can't初始化类型为struct Foo
的变量,如static struct Foo x = { 0 };
?如果我想因为SIOF而获得正确的代码?
我在互联网上找到的关于静态初始化顺序失败的一切都是关于C++的,但是如果我初始化一些类型的全局变量,比如
struct Foo {
int flag;
pthread_key_t key;
void *ptrs[10];
};
I can't初始化类型为struct Foo
的变量,如static struct Foo x = { 0 };
?如果我想因为SIOF而获得正确的代码?
C++中初始化的问题是允许可执行代码在main
函数之前运行,因此并不总是清楚这样的代码将以什么顺序运行.由于静态对象的构造函数,这在C++中是必需的.
另一方面,C不允许代码在函数之外运行. 静态对象的初始化器必须是可以在编译时计算的常量表达式.
这意味着,像static struct Foo x = { 0 };
这样的初始值设定项在C中完全可以使用.