这些宏包括或不包括文字:
#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
,但我不知道如何用TEXT
或{{1}替换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;
}
的参数?
答案 0 :(得分:1)
你要问的可能是不可能的,因为它需要符号 在宏中重新定义,而不是简单的宏扩展。
最简单的替代方案可能是:
#define TEXT SKIP_TEXT
printf("%s\n", "a" TEXT("b") "c" TEXT("d"));
#define TEXT JOIN_TEXT
printf("%s\n", "a" TEXT("b") "c" TEXT("d"));
或没有SKIP_TEXT
/ JOIN_TEXT
-macros:
#define TEXT(x)
printf("%s\n", "a" TEXT("b") "c" TEXT("d"));
#define TEXT(x) x
printf("%s\n", "a" TEXT("b") "c" TEXT("d"));
每个#undef TEXT
之后可能需要 printf
。