1

我得到:

致命错误 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;

谁能看到我哪里出错了?

4

2 回答 2

4

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

正如 Wug 建议的那样,不要使用 a#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);
于 2012-07-19T13:42:05.723 回答
2

尝试

#define V2 256

代替

const int V2 = 256;

编辑:您使用预处理器宏而不是常规分支是有充分理由的,对吗?

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

于 2012-07-19T13:34:06.583 回答