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 つがなぜですか?- 非エスケープが
?うまく機能するのはなぜですか? 警告すらない。
さらに興味深い事実は、エスケープが他のいくつかの言語\?と同じように使用できることです。?私は Lua/Ruby でテストしましたが、文書化されていませんでしたが、これも真実です。