Answers:
最初的C语言是在1969-1972年设计的,当时计算仍由80列打孔卡主导。其设计人员使用了80根色谱柱设备,例如ASR-33 Teletype。这些设备不会自动换行,因此确实有动力将源代码保持在80列之内。在最终转变为自由格式之前,Fortran和Cobol具有明确的延续机制。
丹尼斯·里奇(Dennis Ritchie(我假设))意识到语法没有歧义,并且可以通过使编译器连接相邻文字字符串的简单简便方法,将长ASCII字符串放入80列中,这真是太聪明了。无数的C程序员对此小功能表示感谢。
启用该功能后,为什么还要将其删除?它不会引起悲伤,并且通常很方便。我曾经希望有更多的语言。现代趋势是使用带三引号或其他符号的扩展字符串,但是C中此功能的简单性从未超越。
C没有+
像C#和Java这样的特定字符串连接运算符()。在C#或Java中,当编译器看到
"a" + "b"
它可以像编译代码一样
"ab"
是用源代码编写的。但是,在C语言中,没有类似的简单语法来描述编译器可以识别和预先计算的字符串连接。所以几十年前C的设计师选择了
"a" "b"
意味着与
"ab"
自然,C ++继承了相同的约定。虽然C ++标准库重载+
上std::string
,以平均字符串连接时,编译器不会尝试凝聚"a" + "b"
,因为这实际上是一个错误(您不能添加两个const char *
在一起指针)。
+
以某种方式表示串联,您仍然必须解决串联字符串在内存中的位置问题。
#define FOO "foo-value"
之后跟"FOO's value is " FOO "."