40

在 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 ?

所以我有两个问题:

  1. 为什么是\?转义序列字符之一?
  2. 为什么非转义?工作正常?甚至没有警告。

更有趣的事实是转义符\?也可以像?在其他一些语言中一样使用。我在 Lua/Ruby 中进行了测试,即使我没有找到文档记录也是如此。

4

1 回答 1

44
于 2013-10-15T06:49:29.560 回答