2
這些宏包含或不包含文本:預處理器更換
#include <stdio.h>
#define SKIP_TEXT(text)
#define JOIN_TEXT(text) text
int main(void)
{
#define S(TEXT) "a" TEXT("b") "c" TEXT("d")
printf("%s\n", S(SKIP_TEXT));
printf("%s\n", S(JOIN_TEXT));
return 0;
}
輸出:
ac
abcd
現在我試圖做同樣沒有定義S
每串來評價,但我不「知道如何與SKIP_TEXT
或JOIN_TEXT
#include <stdio.h>
#define SKIP_TEXT(text)
#define JOIN_TEXT(text) text
#define S(s) S_EXEC(s)
#define S_EXEC_SKIP(s) s /* Here I want to skip text */
#define S_EXEC_JOIN(s) s /* Here I want to join text */
#define S_EXEC(s) S_EXEC_##s
int main(void)
{
printf("%s\n", S(SKIP("a" TEXT("b") "c" TEXT("d")));
printf("%s\n", S(JOIN("a" TEXT("b") "c" TEXT("d")));
return 0;
}
更換
有什麼方法可以評估S()
的參數嗎?
不,預處理宏不能分解它的參數。 –