j4n*_*olo 10 c++ preprocessor-directive
我想使用以下预处理器定义:
[第三方标题(不能修改)]
#define SWCI_VERSION_MAJOR (unsigned char) 4
#define SWCI_VERSION_MINOR (unsigned char) 16
Run Code Online (Sandbox Code Playgroud)
当他们以这种方式进行比较时:
[我的实施]
#if SWCI_VERSION_MAJOR >= 4 && SWCI_VERSION_MINOR >= 16
Run Code Online (Sandbox Code Playgroud)
然后我得到:
致命错误C1017:无效的整数常量表达式
我注意到如果我在没有(unsigned char)的情况下定义它们,那么该指令将被接受,但我无法访问这些定义,所以如果可能的话我想解决这个问题.
Kur*_*man 13
您可以使用一些预处理器魔法来实现这一点.由于预处理器应用宏的方式,您有时可以使用多个宏级别进行一些修改.Boost.Preprocessor利用此行为.这段代码利用了这样一个事实:(unsigned char)看起来像是可以通过预先X计算为空的宏名称来进行宏调用,只留下尾随数字.
#define SWCI_VERSION_MAJOR (unsigned char) 4
#define SWCI_VERSION_MINOR (unsigned char) 16
#define X(unused)
#define APPLY(x) x
#define MAJOR (APPLY(X SWCI_VERSION_MAJOR))
#define MINOR (APPLY(X SWCI_VERSION_MINOR))
#if MAJOR >= 4 && MINOR >= 16
#error "Version is greater or equal to 4.16"
#endif
Run Code Online (Sandbox Code Playgroud)
有关评估为true 的示例,请参阅https://goo.gl/GOsLDL#if并打印#error我添加的消息.
| 归档时间: |
|
| 查看次数: |
666 次 |
| 最近记录: |