编译此代码示例时
#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?这是因为否则你将无法拥有带构造函数的全局对象?
答案 0 :(得分:2)
C ++编译器生成一个额外的“开始”功能,其中所有“全局函数调用”在PC(程序计数器)设置为“main”的地址之前执行。
“全局函数调用”是为了初始化全局对象(包括隐式函数调用,即构造函数)而执行的任何函数调用。
C编译器不会生成这样的“启动”功能,只要操作系统加载可执行文件并运行该过程,PC就会设置为“主”。