2017-03-07 28 views
7

私はこれら四つの用語で混乱しています:文字列リテラルと文字列リテラルは標準ですか?

  • 文字列リテラル

  • 文字はリテラル

  • 文字列定数。

  • マルチバイト文字列

そしてC Standardで、この引用を読んだ:

文字列リテラルの必要性は、(7.1.1を参照)文字列ではない、 ヌル理由文字は\0エスケープシーケンスによってその中に埋め込まれることがあります。

最初の部分は何を意味していますか?

+0

文字列リテラル==文字列リテラル – DyZ

+0

@DYZあまりありません。この規格では、文字、UTF-8およびワイド文字列リテラルについて説明しています。それにもかかわらず、私は質問がむしろリテラル対文字列であると思う。 – AlexD

+1

文字列は、定義上、ヌル文字で終了します。文字列リテラルにはヌル文字が含まれている場合があります。したがって、文字列リテラルは文字列ではない可能性があります。 –

答えて

3

  • いずれか文字列である文字列リテラルリテラル、例えば​​;
  • またはUTF-8文字列u8"abc";
  • またはワイド文字列リテラルL"abc"。標準(強調鉱山)から

:リテラル

文字列は"xyz"のように 二重引用符で囲まれたゼロ個以上のマルチバイト文字のシーケンスです。 A UTF-8文字列リテラルは、接頭辞u8以外は同じです。 ワイド文字列リテラルは、、u、またはUの接頭辞を除いて、同じです。
....
変換フェーズ7では、文字列リテラルまたはリテラルの結果である各マルチバイト文字シーケンスに0または0のバイトまたはコードが付加されます。 78)

78)ヌル文字が \ 0エスケープシーケンスにより、それに埋め込まれていてもよいので、文字列(7.1.1を参照)ではない文字列リテラルが必要。


文字列はで終了した文字の連続配列であると最初のヌル文字 含みます。

だから、文字列リテラルは、インスタンス"a\0b"または"\0ab"のために、途中で、あるいは冒頭でも\0を有することができます。これは脚注が言っていることだと思います。定数

キャラクタが可能接頭L/u/Uと、単一引用符でC-チャー配列(通常は単一の文字)です。

整数文字定数

'x'のように、単一引用符で囲まれた 一つ以上のマルチバイト文字のシーケンスです。ワイド文字定数は、 という文字(接頭辞:Lu、またはU)を除いて同じです。

したがって、用語はあまり対称ではありません。IMO。例えば。文字の定数の特定の場合の場合は、です。しかし、文字列リテラルとワイド文字列リテラルは両方とも、の文字列リテラルに属します。

+0

アンダースコアが欠けているようです。私はそれを正しかったと思います。 –

+0

@MadPhysicistありがとう!私たちは並行して編集していたと思う)。 – AlexD

+0

内部にヌル文字を含む文字列リテラルもヌル文字で終了しますか? – Sabrina

関連する問題