我正在尝试制作一个程序,该程序需要这样的东西:
timeit.timeit("a1()", globals=globals())
我希望输出为
#define TEST "HELLO
#define TEST2 WORLD\n"
...
printf(TEST TEST2);
...
但是该代码不起作用。
是否可以在C语言中包含这样的换行符和双引号?
答案 0 :(得分:4)
使用Send-MailMessage
整理宏以使报价转义给您
\"
并产生输出#include <stdio.h>
#define TEST "\"HELLO "
#define TEST2 "WORLD\"\n"
int main(void) {
printf(TEST TEST2);
}
答案 1 :(得分:3)
你不能那样做;宏的替换序列由完整的标记组成。宏在令牌级别而不是字符级别工作。您的示例包含未终止的字符串文字标记。
在宏替换序列中可以使用一个##
运算符来填充令牌,但是##
的输入不能是令牌片段。
但是,在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预处理程序时,您实际上必须关注您的主要目标(例如在程序组织方面实现总体改进),并准备好调整有关如何实现它的要求的细节。 ,而不是坚持某些非常具体的方法。