#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" 的意思相同。

因此,如果我们允许自己以标记 HELLOWORLD 作为输入,那么我们将使用宏构造 "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"