簡體   English   中英

如何評估嵌套的預處理器宏

[英]How to evaluate a nested preprocessor macro

假設我想選擇某個預處理程序指令的行為,在編譯時評估常量字符串和另一個宏的結果的串聯。

#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(因此SCENARIO3替換),因為它的參數都不是令牌粘貼操作符的操作數。 接下來,它擴展了TOKENPASTE_HELPER ,它執行實際的令牌粘貼以生成CASE3 最后,它擴展了CASE3宏以獲得text3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM