我是C的新手,所以这个问题可能很愚蠢。不过,我正在尝试使用Macro。
我当时使用#
将替换文本制成带引号的字符串,并利用宏将在适当的地方自动添加转义字符的功能。
在VS2019中,以下代码给我一个错误,指出错误终止了宏调用。为什么会这样?
#include <stdio.h>
#define toStr(x) #x
main(){
printf(toStr(the "\" is the escape character));
}
答案 0 :(得分:2)
正如@alinsoar在其评论中提到的那样,文本字符串未正确编写。转义字符'\'根据规则转义后面的文本。结果是,当您拥有"\"
时,所指定的是反斜杠后面的引号被转义,这导致文本字符串没有终止引号。参见How to print out a slash (/ or \) in C?
要实际打印转义字符,您需要像"\\"
中那样对它进行转义,这将导致打印单个转义字符,并且文本字符串也应正确地用引号引起来。
请参见C Preprocessor, Stringify the result of a macro,其中提供了有关C预处理程序的Stringify运算符的信息,这是用于宏扩展的#
的作用。
您应该查看转义字符及其在C中的用法的各种规则。C++的此列表与C的列表几乎相同。https://en.cppreference.com/w/cpp/language/escape