我想使用以下预处理器定义:
#define SWCI_VERSION_MAJOR (unsigned char) 4 #define SWCI_VERSION_MINOR (unsigned char) 16
当他们以这种方式进行比较时:
[我的实施]
#if SWCI_VERSION_MAJOR >= 4 && SWCI_VERSION_MINOR >= 16
然后我得到:
fatal error C1017: invalid integer constant expression
我注意到,如果我定义它们(unsigned char),则该指令将被接受,但是我无法访问定义,所以如果可能,我想解决该问题.
解决方法
你可以得到这个工作与一点预处理魔术.由于预处理器应用宏的方式,有时可以通过使用多个宏级别进行一些修改. Boost.Preprocessor利用此行为.这个代码利用了这样的事实,即(unsigned char)看起来可以通过前面的宏名称X进行宏调用,该名称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
有关#if评估true并打印我添加的#error消息的示例,请参见https://goo.gl/GOsLDL.