为什么字符上有分隔符?基于c
Why delimiter on char? c-based
前几天我用C#写了一些代码,这让我思考起来。如果一个字符文字只能有1个字符(或分隔字符),那么为什么我们需要结束分隔符?
例如,目前我们需要写:
char character = 's';
这在任何情况下都不可行(显然):
char character = 'sa';
那么,为什么我们必须放置结束'
,而不是隐含它呢?例如:
char character = 's;
char anotherCharacter = '';
可读性只会受到影响,因为我们习惯了当前的标准(不一定是因为这种方式可读性较差)。
- 这是一个惯例
- 在这个unicode世界中,字符不一定表示在一个字符中
- 控制/转义序列可以长于一个字符(例如"\0x1a")
在C#、Java和C++中,答案很简单:
因为这就是它在C.中实现的方式
为什么它是以C的方式实现的?
谁知道呢?在第一个C解析器/编译器中,可能存在一些实现上的怪癖,这使得这个选择显而易见;我打赌K&R只是没想过。一句话看起来很奇怪。
'abcd'
是一个多字符文字;它的类型是int
,它的值是由实现定义的。需要结束'
来标记文字的结束。
现有的C语法将字符常量定义为:
字符常量:
'
c-电荷序列'
L'
c-电荷序列'
你的问题归结为为什么不能将其定义为:
字符常量:
'
c-char
L'
c-char
好吧,它可以——从某种意义上说,这仍然是一个一致的可解析语法,并且你仍然能够表达单字符常量。您不能表达多个字符常量(例如'ab'
)——这些常量是合法的,但有一个由实现定义的值。
我怀疑真正的原因仅仅是美学。例如,理论上也没有理由需要围绕if
语句的条件表达式进行副题。
相关文章:
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- QMetaObject invokeMethod的基于函数指针的语法
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 基于多个条件处理地图中的所有元素
- 基于ELO的团队匹配算法
- 基于boost的程序的静态链接——zlib问题
- 在基于范围的for循环中使用结构化绑定声明
- 基于模板值的条件变量
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 当用户键入分隔符时,停止getline()输入
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 是否基于数组B整数打印数组A中的整数
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 显示基于用户输入的整数的字符
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 基于 C++ 中的多个字符串分隔符拆分字符串
- 为什么字符上有分隔符?基于c
- 基于特定分隔符拆分字符串的最有效的c++方法是什么?类似于python中的split方法
- 如何基于分隔符映射N个关键字