[第三方标题(不能修改)]
#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.
总结以上是内存溢出为你收集整理的c – 如何从#define中删除C风格的转换,所以我可以在预处理器#if中使用它?全部内容,希望文章能够帮你解决c – 如何从#define中删除C风格的转换,所以我可以在预处理器#if中使用它?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)