是否有辦法在宏定義的開始處象征性地粘貼一個引數或非功能宏?換句話說,就像允許像#define JOIN_TOKENS(a, b) ##a##b這樣的東西一樣。
一個例子是JOIN_TOKENS(Up, Here)變成UpHere。另外,我希望任何作為引數傳遞的值不被擴展。這幾乎做到了,但它產生了一個錯誤:
#define APPEND_TOKEN(a, b) a##b.
#define VAR 0
#define JOIN(a, b) APPEND_TOKEN(##a, ##b)
JOIN(VAR, iable)
它應該產生VARiable,而且它確實產生了,但是有伴隨的錯誤:
<stdin>:4:1: error: pasteing formed ' (VAR', an invalid preprocessing token
JOIN(VAR, iable)
^
<stdin>:3:33: 注意:從宏'JOIN'展開。
#define JOIN(a, b) APPEND_TOKEN(##a, ##b)
^
<stdin>:4:1: 錯誤:粘貼形成',iable', 一個無效的預處理標記
<stdin>:3:38: 注意:從宏'JOIN'展開。
#define JOIN(a, b) APPEND_TOKEN(##a, ##b)
^
/
VARiable
2錯誤產生。
uj5u.com熱心網友回復:
類似這樣的事情?
//encloses the argument Arg in quotation marks。
//concatenates the two arguments Arg1 and Arg2 to a new token。
測驗:
#define A MY_
#define B SPECIAL_
#define C TYPE
printf("%s
", STRINGIFY(CAT(A, CAT(B, C))));
//output: MY_SPECIAL_TYPE[/span>
/* or */
#define MY_VAR CAT(A, CAT(B, C))
typedef int MY_VAR;
MY_VAR i = 42;
printf("%d
", i)。)
//輸出。42
uj5u.com熱心網友回復:
#define APPEND_TOKEN(a, b) a##b. #define VAR 0 #define JOIN(a, b) APPEND_TOKEN(##a, ##b) JOIN(VAR, iable)它應該產生VARiable
。
只需使用下面的代碼:
#define VAR 0
#define JOIN(a, b) a##b.
JOIN(VAR, iable)
產生以下預處理程式輸出。在godbolt上測驗:
VARiable。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/322480.html
標籤:
上一篇:C鏈接表的實施
