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

Difference between C and C++ static initialization

本文关键字:之间 区别 初始化 静态 C++      更新时间:2023-10-16

编译此代码示例时

#include <stdio.h>
#include <stdlib.h>
int myfunc()
{
    printf("Constructorn");
    return 1;
}
static const int dummy = myfunc();
int main()
{
    printf("mainn");
    return 0;
}

当编译为C++时,它工作,但不能使用相同的编译器(MingW gcc)作为C。我在 C 模式下得到一个initializer element is not constant

因此,显然在静态初始化方面存在差异。有没有理由为什么这显然是允许的C++而不适用于 C ?这是因为否则您将无法使用构造函数的全局对象吗?

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

"全局函数调用

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

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