c++ - C 和 C++ 静态初始化之间的区别

标签 c++ c

<分区>

编译此代码示例时

#include <stdio.h>
#include <stdlib.h>

int myfunc()
{
    printf("Constructor\n");
    return 1;
}

static const int dummy = myfunc();

int main()
{
    printf("main\n");
    return 0;
}

它在编译为 C++ 时有效,但在使用相同编译器 (MingW gcc) 时不能作为 C。我得到一个 initializer element is not constant in C mode。

所以显然在静态初始化方面存在差异。为什么 C++ 显然允许这样做,但 C 却不允许这样做?这是因为否则您将无法拥有具有构造函数的全局对象吗?

最佳答案

C++ 编译器生成一个额外的“开始”函数,其中所有“全局函数调用”都在 PC(程序计数器)设置为“main”的地址之前执行。

“全局函数调用”是为初始化全局对象而执行的任何函数调用(包括隐式函数调用,即构造函数)。

C 编译器不会生成这样的“开始”函数,一旦操作系统加载可执行文件并运行进程,PC 就会设置为“main”。

关于c++ - C 和 C++ 静态初始化之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21061181/

相关文章:

c - 使用定时器进行套接字编程

c - 二维数组结构段错误

c++ - 调用cout时,如何在struct中输出常量文本?

c++ - 将函数的默认参数设置为数组

c - pwntools 中的 p64() 无法正常工作

对静态变量的困惑

c++ - 如何从堆中删除变量?

c++ - 从 Eclipse 调试 Python C++ 扩展(在 Linux 下)

c++ - 递归类型真的是构建非连续任意大小数据结构的唯一方法吗?

c - 如何填写用于 msghdr 的 iov_iter 结构?