40

C/C++ でエスケープする必要がある 4 つの特殊な非アルファベット文字があります: 一\'重引用符、二重引用符\"、バックスラッシュ\\、および疑問符\?です。特別な意味があるかららしい。'single char"文字列リテラル、\エスケープ シーケンスの場合、なぜ?それらの 1 つなのですか?

今日、教科書のエスケープ シーケンスの表を読みましたが、これまで一度もエスケープし?たことがなく、問題に遭遇したこともないことに気付きました。念のため、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 ?

だから私は2つの質問があります:

  1. \?エスケープ シーケンス文字の 1 つがなぜですか?
  2. 非エスケープが?うまく機能するのはなぜですか? 警告すらない。

さらに興味深い事実は、エスケープが他のいくつかの言語\?と同じように使用できることです。?私は Lua/Ruby でテストしましたが、文書化されていませんでしたが、これも真実です。

4

1 に答える 1

44
于 2013-10-15T06:49:29.560 に答える