#define CASE1 text1#define CASE2 text2#define CASE3 text3#define SCENARIO 3/** the following won't work - for examplification purposes only**/#define FUNCTION CASE##SCENARIO/** whenever I write FUNCTION,I expect to see text3 **/
我很难想到一个可行的解决方案,因为预处理器是一次通过的野兽.这甚至可行吗?
解决方法 这是可能的,你只需要添加一些额外的宏层.关键是当你使用令牌粘贴 *** 作符##时,预处理器不会扩展其 *** 作数.但是,如果添加另一层宏,预处理器将扩展这些参数.例如:#define CASE1 text1#define CASE2 text2#define CASE3 text3#define SCENARIO 3#define TOKENPASTE_HELPER(x,y) x ## y#define TOKENPASTE(x,y) TOKENPASTE_HELPER(x,y)#define FUNCTION TOKENPASTE(CASE,SCENARIO)
当预处理器扩展FUNCTION时,它会扩展TOKENPASTE.当它扩展TOKENPASTE时,它会扩展它的arugments(因此SCENARIO被3替换),因为它的参数都不是令牌粘贴 *** 作符的 *** 作数.接下来,它扩展了TOKENPASTE_HELPER,它执行实际的令牌粘贴以生成CASE3.最后,它扩展了CASE3宏以获得text3.
总结以上是内存溢出为你收集整理的如何评估嵌套的预处理器宏全部内容,希望文章能够帮你解决如何评估嵌套的预处理器宏所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)