编译器错误 C2356

初始化段在翻译单元期间不能更改

可能的原因:

  • #pragma init_seg 前面是段初始化代码

  • #pragma init_seg 前面是另一个 #pragma init_seg

若要解决此问题,请将段初始化代码移到模块的开头。 如果必须初始化多个区域,请将其移动到单独的模块。

以下示例生成 C2356:

// C2356.cpp
#pragma warning(disable : 4075)

int __cdecl myexit(void (__cdecl *)());
int __cdecl myexit2(void (__cdecl *)());

#pragma init_seg(".mine$m",myexit)
#pragma init_seg(".mine$m",myexit2)   // C2356