C ++致命错误C1017

时间:2012-07-19 13:31:54

标签: c++ c-preprocessor

我得到了:

  

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

有人可以看到我哪里出错吗?

2 个答案:

答案 0 :(得分:3)

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

而不是使用#define作为常量,正如Wug所建议的那样,更清洁的解决方案将是:

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

答案 1 :(得分:2)

#define V2 256

而不是

const int V2 = 256;

编辑:有一个很好的理由让你做预处理器宏而不是常规分支,对吗?

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