在 C/C++ 中有四个特殊的非字母字符需要转义:单引号\'
、双引号\"
、反斜杠\\
和问号\?
。这显然是因为它们具有特殊的含义。'
对于 single char
,"
对于字符串文字,\
对于转义序列,但为什么是?
其中之一?
我今天读了一本教科书中的转义序列表,我意识到我以前从未逃脱?
过,也从未遇到过问题。可以肯定的是,我在 GCC 下对其进行了测试:
#include <stdio.h>
int main(void)
{
printf("question mark ? and escaped \?\n");
return 0;
}
和 C++ 版本:
#include <iostream>
int main(void)
{
std::cout << "question mark ? and escaped \?" << std::endl;
return 0;
}
两个程序输出: question mark ? and escaped ?
所以我有两个问题:
- 为什么是
\?
转义序列字符之一? - 为什么非转义
?
工作正常?甚至没有警告。
更有趣的事实是转义符\?
也可以像?
在其他一些语言中一样使用。我在 Lua/Ruby 中进行了测试,即使我没有找到文档记录也是如此。