C++致命错误C1017

C++ Fatal Error C1017

本文关键字:C1017 致命错误 C++      更新时间:2023-10-16

我得到了:

致命错误C1017:整数常量表达式无效

带有以下代码:

#if V1>0
//do stuff
#endif

V1在.cpp文件的顶部定义如下:

#define V3 UINT32
#define V4  sizeof(V3)
#define V1 (V2 % V4)

V2定义如下:

const int V2 = 256;

有人能看出我哪里错了吗?

编译前进行预处理。这意味着您不能在预处理期间使用编译时概念(即const int TOTAL = 16;)。预处理器不知道程序中的变量(甚至是const)。

与Wug建议的使用#define作为常数不同,更清洁的解决方案是:

typedef UINT32 TARGET_TYPE;
const int TARGET_TYPE_SIZE = sizeof(TARGET_TYPE);
const int TOTAL = 16;
const int NUM_BYTES = (TOTAL % TARGET_TYPE_SIZE);

尝试

#define V2 256

而不是

const int V2 = 256;

编辑:你做预处理器宏而不是常规分支是有充分理由的,对吧?

编辑2:正如其他人所指出的,预处理器不接受sizeof语句,因为这些语句是由编译器处理的。您可以选择使用编程if语句(而不是预处理器语句)或使用size表达式的实际值(这将涉及对大小进行硬编码。然而,由于它是UINT32,我认为它永远不会是4以外的任何值。

相关文章: