#define 中的换行符和单双引号
Newline and single double quotes in #define
我正在尝试制作一个需要这样的程序(只是为了好玩):
#define TEST "HELLO
#define TEST2 WORLD\n"
...
printf(TEST TEST2);
...
我希望输出为
HELLO WORLD
但是该代码不起作用。
有没有办法在 C 中像这样包含换行符和双引号?
你不能那样做;宏的替换序列由完整的标记组成。宏在标记级别而不是字符级别工作。您的示例包含未终止的字符串文字标记。
有一个 ##
运算符可用于宏替换序列中以连接标记,但 ##
的输入不能是标记片段。
但是,在 C 语法中,相邻的字符串文字标记组合成单个字符串文字对象。例如 "A" "B"
与 "AB"
的意思相同。
因此,如果我们允许自己以标记 HELLO
和 WORLD
作为输入,那么我们将使用宏构造 "HELLO WORLD\n"
,如下所示:
#include <stdio.h>
#define XMAC(A, B) #A " " #B "\n"
#define MAC(A, B) XMAC(A, B)
#define TEST HELLO
#define TEST2 WORLD
int main(void)
{
printf("%s", MAC(TEST, TEST2));
return 0;
}
当涉及到 C 预处理器时,您确实必须关注您的主要目标(例如在程序组织方面实现一些整体改进),并准备调整关于它如何实现的需求细节实现,而不是坚持一些非常具体的方法。
使用 \"
排列宏以 转义 引文给你
#include <stdio.h>
#define TEST "\"HELLO "
#define TEST2 "WORLD\"\n"
int main(void) {
printf(TEST TEST2);
}
并产生输出 "HELLO WORLD"
我正在尝试制作一个需要这样的程序(只是为了好玩):
#define TEST "HELLO
#define TEST2 WORLD\n"
...
printf(TEST TEST2);
...
我希望输出为
HELLO WORLD
但是该代码不起作用。
有没有办法在 C 中像这样包含换行符和双引号?
你不能那样做;宏的替换序列由完整的标记组成。宏在标记级别而不是字符级别工作。您的示例包含未终止的字符串文字标记。
有一个 ##
运算符可用于宏替换序列中以连接标记,但 ##
的输入不能是标记片段。
但是,在 C 语法中,相邻的字符串文字标记组合成单个字符串文字对象。例如 "A" "B"
与 "AB"
的意思相同。
因此,如果我们允许自己以标记 HELLO
和 WORLD
作为输入,那么我们将使用宏构造 "HELLO WORLD\n"
,如下所示:
#include <stdio.h>
#define XMAC(A, B) #A " " #B "\n"
#define MAC(A, B) XMAC(A, B)
#define TEST HELLO
#define TEST2 WORLD
int main(void)
{
printf("%s", MAC(TEST, TEST2));
return 0;
}
当涉及到 C 预处理器时,您确实必须关注您的主要目标(例如在程序组织方面实现一些整体改进),并准备调整关于它如何实现的需求细节实现,而不是坚持一些非常具体的方法。
使用 \"
排列宏以 转义 引文给你
#include <stdio.h>
#define TEST "\"HELLO "
#define TEST2 "WORLD\"\n"
int main(void) {
printf(TEST TEST2);
}
并产生输出 "HELLO WORLD"