为什么字符上有分隔符?基于c

Why delimiter on char? c-based

本文关键字:基于 分隔符 字符 为什么      更新时间:2023-10-16

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

例如,目前我们需要写:

char character = 's';

这在任何情况下都不可行(显然):

char character = 'sa';

那么,为什么我们必须放置结束',而不是隐含它呢?例如:

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

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

  1. 这是一个惯例
  2. 在这个unicode世界中,字符不一定表示在一个字符中
  3. 控制/转义序列可以长于一个字符(例如"\0x1a")

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

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

为什么它是以C的方式实现的?

谁知道呢?在第一个C解析器/编译器中,可能存在一些实现上的怪癖,这使得这个选择显而易见;我打赌K&R只是没想过。一句话看起来很奇怪。

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

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

字符常量

'c-电荷序列'

L'c-电荷序列'

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

字符常量

'c-char

L'c-char

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

我怀疑真正的原因仅仅是美学。例如,理论上也没有理由需要围绕if语句的条件表达式进行副题。