编译器错误 C2099
初始值设定项不是常量
此错误仅由 C 编译器发出,并仅发生在非自动变量上。 编译器在启动程序时初始化非自动变量,并且初始化的值必须是常数。
示例
下面的示例生成 C2099。
// C2099.c
int j;
int *p;
j = *p; // C2099 *p is not a constant
由于编译时与运行时的浮点精度环境设置(有关详细信息,请参阅 _controlfp_s )可能不同,因此,编译器无法在 /fp:strict 下对表达式执行常数合并。在这种情况下,也可能发生 C2099。
当常数折叠失败时,编译器将调用动态初始化,而这在 C 中是不被允许的。
若要解决此错误,请将模块编译为 .cpp 文件或简化表达式。
有关详细信息,请参阅 /fp(指定浮点行为)。
下面的示例生成 C2099。
// C2099_2.c
// compile with: /fp:strict /c
float X = 2.0 - 1.0; // C2099
float X2 = 1.0; // OK
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈