Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么C名称被缩短?_C_Function_Naming Conventions_Conventions - Fatal编程技术网

为什么C名称被缩短?

为什么C名称被缩短?,c,function,naming-conventions,conventions,C,Function,Naming Conventions,Conventions,为什么有一个名为strcat的函数,而没有一个名为stringconcatation或stringConcat或类似的函数?为什么有clrsc功能而没有clearScreen或clear\u screen 这与过去的源代码大小有关吗?在过去的日子里,在超大尺寸的软盘上,每个字节都值黄金?或者这是由程序员天生的懒惰造成的?这是一个惯例吗?这部分是历史的 在非常旧的C编译器中,无法保证使用超过标识符名称前8个字符来确定唯一性。这意味着,最初,所有标识符必须是八个或更少的字符,因此方法名称都被缩短 有

为什么有一个名为
strcat
的函数,而没有一个名为
stringconcatation
stringConcat
或类似的函数?为什么有
clrsc
功能而没有
clearScreen
clear\u screen


这与过去的源代码大小有关吗?在过去的日子里,在超大尺寸的软盘上,每个字节都值黄金?或者这是由程序员天生的懒惰造成的?这是一个惯例吗?

这部分是历史的

在非常旧的C编译器中,无法保证使用超过标识符名称前8个字符来确定唯一性。这意味着,最初,所有标识符必须是八个或更少的字符,因此方法名称都被缩短


有关详细信息,请参见。

当C及其相关工具首次被开发时,输入设备远不如现代键盘那么容易使用。我从未实际使用过,但据我所知,在这样一个beast上键入
stringConcatenation
要比键入
strcat
困难得多(如果没有自动补全,您将不得不键入完整的名称,而不必输入错误)。启动每个键需要相当大的压力。以现代标准衡量,产量也慢得令人痛苦

这也解释了为什么常见的Unix命令名如此简洁(
mv
cp
而不是
move
rename
copy

这可能也是为什么旧的链接器只支持这么短的名称。程序员通常会首先创建短名称,因此使用有限的内存来允许长名称没有什么意义


除此之外,还有一种情况需要说明,短名字和长名字一样好。库函数的名称,无论是
strcat
还是
stringConcatenation
(或者是
stringConcatenate
String\u Concatenate
?)本质上都是任意的。打字的方便性已经不像以前那么重要了,但它仍然是一个考虑因素。

原因有很多:打字速度更快,阅读速度更快,更多的代码可以放在一个屏幕上,这样你就可以一次看到更多的代码。在C的一些早期实现中,只有标识符名称的前八个字符是重要的。此外,一些链接器只允许使用六个有效字符。C语言是在20世纪70年代开发的。当时短名字很流行。时尚和风格已经改变。请记住,当时的开发环境没有代码完成功能,因此如果名称是stringConcat,那么实际上每次都必须键入stringConcat。“更快阅读”的论点是荒谬的。有些人喜欢能够阅读他们的代码。过于冗长的名称不可读。行变成>80个字符(这不仅是终端限制,也是人类可读性问题),必须进行包装,导致屏幕上的匹配度太低。我无法忍受java和C++程序员类型的函数和变量名的类型……当问题被关闭时,我写的是相同的响应。1用于快速键入。;-)根据您链接的同一引用,标识符的长度没有限制,只是只考虑了前8个。当时使用8个以上可能是个坏主意:
stringConcatenate
stringCollapse
将被视为同一个名称。@Caleb:没错-尽管一些早期的编译器(我使用的一个)确实抱怨标识符过长。但比这更糟糕的是,许多平台在某些场景中也只使用了前六个字符。。。总的来说,它产生了很多短标识符,我相信这已经成为一种标准实践。。。