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

时间:2014-01-11 10:31:21

标签: 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

显然,静态初始化存在差异。是否有理由为C ++显然允许这样做而不是C?这是因为否则你将无法拥有带构造函数的全局对象?

1 个答案:

答案 0 :(得分:2)

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

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

C编译器不会生成这样的“启动”功能,只要操作系统加载可执行文件并运行该过程,PC就会设置为“主”。