【发布时间】:2013-10-15 06:49:29
【问题描述】:
在 C/C++ 中有四个特殊的非字母字符需要转义:单引号 \'、双引号 \"、反斜杠 \\ 和问号 \?。这显然是因为它们具有特殊的含义。 ' 用于单个 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 中进行了测试,即使我没有找到文档记录也是如此。
【问题讨论】:
-
我不确定其他编译器,但
gcc默认忽略二合字母和三合字母。 -
@devnull 是的,我在自己的回答中说了同样的话。 :)
-
后来看到了,评论了。
-
来自this 答案:
This is why the escape sequence '\?' is recognized (as a simple question mark - though presumably that is '??/?').