4

先日、C# でコードを書いていて、考えさせられました。char リテラルが 1 文字 (または区切り文字) しか持てない場合、なぜ終了区切り文字が必要なのですか?

たとえば、現在、次のように記述する必要があります。

char character = 's';

そして、これが機能する状況はありません(明らかに):

char character = 'sa';

それでは、なぜ締めくくりを'暗示するのではなく、締めくくらなければならないのでしょうか。例えば:

char character = 's;
char anotherCharacter = '\';

読みやすさは、現在の標準に慣れているためにのみ影響を受けます (必ずしもこの方法が読みにくいからではありません)。

4

4 に答える 4

7
  1. コンベンションです
  2. このユニコードの世界では、文字は必ずしも 1 文字で表されるわけではありません
  3. 制御/エスケープ シーケンスは 1 文字より長くすることができます (例: '\0x1a' )
于 2013-07-10T00:49:20.560 に答える
1

'abcd'複数文字のリテラルです。その型はintであり、その値は実装定義です。'リテラルの終わりを示すには、終了が必要です。

于 2013-07-10T12:30:41.850 に答える
0

既存の C 構文は、文字定数を次のように定義します。

文字定数:

' c-char-sequence '

L' c-char-sequence '

あなたの質問は、これを次のように定義できなかった理由に要約されます。

文字定数:

' c-char

L' c-char

まあ、これは一貫した解析可能な文法であり、単一文字の定数を表現できるという意味では可能です。できなかったのは、複数文字の定数 (例: 'ab') を表現することです。これらは正当ですが、実装定義の値を持っています。

本当の理由は単純に美学にあると思います。ifたとえば、ステートメントの条件式の前後に括弧が必要な理由も、理論上はありません。

于 2013-07-10T01:19:03.570 に答える