C 在替换文本之前使用#时错误终止宏调用
我是C语言的新手,所以这个问题可能很愚蠢。尽管如此,我还是试着玩macro 我使用了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
#
将替换文本转换成带引号的字符串,并利用了宏将在适当的地方自动添加转义字符的功能
在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>几乎相同。 另请参见
您应该写这个“\\”是转义字符
您应该写这个“\\”是转义字符