【发布时间】:2014-10-17 12:08:50
【问题描述】:
我有一个关于使用#pragma 消息打印#defines 的评估值的快速问题。我在 Visual Studio 2008 中使用 msvc++。
下面是一个简化的例子:
#define __STR2__(x) #x
#define __STR1__(x) __STR2__(x)
#define WIDTH 10
#define HEIGHT 10
#define AREA (WIDTH * HEIGHT)
#pragma message("Area is: " __STR1__(AREA))
现在当我编译时,我得到以下输出:
>Area is: (10 * 10)
这不是我想要的。有什么方法可以打印出 #define 表达式的计算结果,以便我得到:
>Area is: 100
在编译期间。也许这是不可能的。最终,如果评估值太大,我希望能够导致编译器错误。即
#if(AREA > 1000)
#pragma message(__ERROR__)
#endif
我的一些#defines 使用sizeof(),我认为这在评估条件时会导致问题 - 但这是未来的问题!
我查看了以下帖子How do I show the value of a #define at compile time in gcc,只要将#define 定义为一个值,而不是其他#defines 的串联,就可以了。
【问题讨论】:
标签: c++ visual-c++ c-preprocessor pragma