Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在替换文本之前使用#时错误终止宏调用_C_Macros - Fatal编程技术网

C 在替换文本之前使用#时错误终止宏调用

C 在替换文本之前使用#时错误终止宏调用,c,macros,C,Macros,我是C语言的新手,所以这个问题可能很愚蠢。尽管如此,我还是试着玩macro 我使用了#将替换文本转换成带引号的字符串,并利用了宏将在适当的地方自动添加转义字符的功能 在VS2019中,以下代码给出了一个错误,表示宏调用未正确终止。为什么呢 #include <stdio.h> #define toStr(x) #x main(){ printf(toStr(the "\" is the escape character)); } #包括 #定义toStr(x)#x ma

我是C语言的新手,所以这个问题可能很愚蠢。尽管如此,我还是试着玩macro

我使用了
#
将替换文本转换成带引号的字符串,并利用了宏将在适当的地方自动添加转义字符的功能

在VS2019中,以下代码给出了一个错误,表示宏调用未正确终止。为什么呢

#include <stdio.h>

#define toStr(x) #x

main(){
    printf(toStr(the "\" is the escape character));
}
#包括
#定义toStr(x)#x
main(){
printf(toStr(“\”是转义字符));
}

正如@alinsoar在他们的评论中提到的,文本字符串没有正确编写。转义字符“\”根据规则转义以下文本。结果是,当您有
“\”
时,您指定的是反斜杠后面的引号被转义,这导致文本字符串没有终止引号。看

要实际打印转义字符,您需要按照
“\\”
中的方式对其进行转义,这将导致打印单个转义字符,并且文本字符串也会用终止引号正确关闭

请参阅which提供了有关C预处理器的Stringify操作符的信息,这是宏扩展的
所做的

你应该查看C.中的转义字符的各种规则及其用法。C++的这个列表与C.</P>几乎相同。


正如@alinsoar在他们的评论中提到的,文本字符串写得不正确。转义字符“\”根据规则转义以下文本。结果是,当您有
“\”
时,您指定的是反斜杠后面的引号被转义,这导致文本字符串没有终止引号。看

要实际打印转义字符,您需要按照
“\\”
中的方式对其进行转义,这将导致打印单个转义字符,并且文本字符串也会用终止引号正确关闭

请参阅which提供了有关C预处理器的Stringify操作符的信息,这是宏扩展的
所做的

你应该查看C.中的转义字符的各种规则及其用法。C++的这个列表与C.</P>几乎相同。 另请参见

您应该写
这个“\\”是转义字符
您应该写
这个“\\”是转义字符