c – 如何从#define中删除C风格的转换,所以我可以在预处理器#if中使用它?

c – 如何从#define中删除C风格的转换,所以我可以在预处理器#if中使用它?,第1张

概述我想使用以下预处理器定义: [第三方标题(不能修改)] #define SWCI_VERSION_MAJOR (unsigned char) 4#define SWCI_VERSION_MINOR (unsigned char) 16 当他们以这种方式进行比较时: [我的实施] #if SWCI_VERSION_MAJOR >= 4 && SW 我想使用以下预处理器定义:

[第三方标题(不能修改)]

#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中使用它?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1235121.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存