4

前几天我正在用 C# 编写一些代码,这让我开始思考。如果 char 文字只能有 1 个字符(或分隔字符),那么为什么我们需要结束分隔符?

例如,目前我们需要写:

char character = 's';

并且没有任何情况可以工作(显然):

char character = 'sa';

那么为什么我们必须结束'而不是暗示呢?例如:

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

可读性只会受到影响,因为我们已经习惯了当前的标准(不一定是因为这种方式可读性较差)。

4

4 回答 4

7
  1. 这是一个约定
  2. 在这个 unicode 世界中,字符不一定用一个字符表示
  3. 控制/转义序列可以长于一个字符(例如 '\0x1a' )
于 2013-07-10T00:49:20.560 回答
2

在 C#、Java 和 C++ 中,答案很简单:

因为这就是它在 C 中实现的方式。

为什么它以这种方式在 C 中实现?

谁知道?在第一个 C 解析器/编译器中可能存在一些实现怪癖,使这种选择变得显而易见;我敢打赌,K&R 只是没有考虑到这一点。单引号看起来很奇怪。

于 2013-07-10T01:10:39.777 回答
1

'abcd'是多字符文字;它的类型是int,它的值是实现定义的。需要结束'来标记文字的结尾。

于 2013-07-10T12:30:41.850 回答
0

现有的 C 语法将字符常量定义为:

字符常量

' c字符序列 '

L' c字符序列 '

您的问题归结为为什么不能将其定义为:

字符常量

' c字符

L' c字符

好吧,它可以 - 从某种意义上说,这仍然是一个一致的可解析语法,并且您仍然能够表达单字符常量。您不能做的是表达多字符常量(例如。'ab') - 这些是合法的,但具有实现定义的值。

我怀疑真正的原因仅仅是美学。例如,理论上也没有理由在if语句的条件表达式周围需要括号。

于 2013-07-10T01:19:03.570 回答