• ベストアンサー

文字列中のシングルクォートにエスケープシーケンスは必要?

C言語でダブルクォートで囲まれた文字列内で使われる、「\」で始まるエスケープシーケンスがありますよね。例えば、 「\n」 ⇒ 改行 「\t」 ⇒ タブ 「\"」 ⇒ ダブルクォート 「\\」 ⇒ バックスラッシュ などですが、C言語のリフェレンスを見ると「\'」(シングルクォート)や「\?」(クエスチョンマーク)なども載っていました。でもこれらの文字は、実際はエスケープシーケンスを使わなくても、ちゃんとコンパイルされ表示もされます。 「'」や「?」をC言語の文字列内で使うには、公式には「\」が必要なんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

\? のほうは、今となっては悪名高い、「トライグラフ」に関連したものです。 Cでよく使われる記号で、{ } | # \ などの記号は、実は、各国で文字コードが結構ばらばらです。(バックスラッシュが、JIS では \ になってしまうのは、我々にはなじみが深いですが) さて、それを避けるために、?? + 1文字で、上記の文字を代用することができます。 具体的には、URL をどうぞ。 今でもこの仕様は有効なので、??なんとか とすると、訳のわからないエラーに見舞われることがあります。 (gcc はデフォルトで OFF らしい) これの対策で、明示的に ?? と、2連発したいときなど、 \?\? が安全なのかもしれません。

参考URL:
http://rec.ncos.co.jp/cgi-bin/e000.cgi?64
BearCave
質問者

お礼

トライグラフの存在を初めて知りました。サイトも参考になりました。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★回答者No.2です。 ・ちょっと訂正。  『??=』の3文字で『#』文字でした。  失礼しました。

すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドバイス >「\?」は「仕様上、そうなっている」だけです。 >「?」単独で書いても「?」と解釈される部分では「?」と書いて構いません。  ↑  『三連文字』対策のため。  例えば  printf( "??=あ\n" );  とすると『??』が三連文字と解釈されて『#』となります。  よって実際に『??=あ』と表示するには  printf( "\?\?=あ\n" );  とします。このような場合に『\?』は利用されます。

BearCave
質問者

お礼

トライグラフの存在を初めて知りました。ありがとうございました。

すると、全ての回答が全文表示されます。
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

「\'」は char c = '\''; と書く場合に必要です。 「\?」は「仕様上、そうなっている」だけです。「?」単独で書いても「?」と解釈される部分では「?」と書いて構いません。

BearCave
質問者

お礼

そう言えばcharの方では絶対必要ですね。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A