我在互联网上找到的关于静态初始化顺序失败的一切都是关于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中完全可以使用.

C++相关问答推荐

如何一次获取一个字符

如何在C中从函数返回指向数组的指针?

为什么GCC在每次循环迭代时都会生成一个数组的mov&S使用[]访问数组?(-03,x86)

仅在给定的大小和对齐方式下正确创建全局

如何在c++中包装返回空*的函数

C-使用指针返回修改后的整数数组

如何在C-函数中混合使用C代码和ASM?

MacOS下C++的无阻塞键盘阅读

C语言中的数字指针

从整型转换为浮点型可能会改变其值.

Linux/C:带有子进程的进程在添加waitid后都挂起

如何使用WRITE()以指针地址的十六进制形式写入标准输出

在C中使用字符串时是否不需要内存分配?

关于不同C编译器中的__attribute__支持

macos/arm64 上地址空间不使用第一位吗?

为什么 Linux 共享库 .so 在内存中可能比在磁盘上大?

为什么INT_MIN是在c语言的头文件limits.h中定义的(-INT_MAX-1)而不是直接使用-2147483648

使用邻接表创建图

UEFI 应用程序中的计时器回调仅在 AMI BIOS 中挂起

为什么实现文件中的自由函数默认没有内部链接?