为什么c语言会有变量名长度限制,如果有为何不预编译的时候转换一下?

为什么c语言会有变量名长度限制,如果有为何不预编译的时候转换一下就得了?

阅读 3.9k
4 个回答

C语言的设计是在上世纪70年代,那时候的计算机内存各方面的资源有限制。变量名限制长度话可以减少内存占用。
还有就是标准化问题:C语言的标准(比如ANSI C)规定了编译器必须支持的最小标识符长度,一般是是31个字符。还有就是太长可读性不高,想想你的名字如果别人要叫你完整的名字,还要理解你名字的寓意,从读和理解这个过程时间就拉长了,你说的预编译转换,反而会有新问题,比如变量名冲突,不好调试。

我的理解是由语言特性给予,而C语言本身就是一门比较古老的编程语言,在上个世纪大多数编程会和机器接触,而涉及到硬件机器,那么避免不了对内存上的控制,而这样的传统,现在嵌入式方向上是可以看到的;而预编译,只是把该代码转化成汇编语言下的文本(.o文件),这只是C语言作为处代码位可执行文件过程的一部分,就相当于只做翻译工装,而不做代码的执行工作,况且在C语言里面是有强制转换的。

这就其实就是 parser 的限制,也就是 parser 所支持的最长变量名长度。预编译转换也是 parser 完成解析之后的。

C语言的变量名长度限制主要是因为早期的编译器要节约内存和提高处理速度,所以设定了长度限制。另外,太长的变量名可能会让编译器处理起来头疼。

预编译的时候把变量名转换一下虽然听起来可行,但实际上可能会带来新的麻烦。比如,如果两个长变量名被转换成同一个短变量名,那就会出现命名冲突。而且,这样做还会让调试变得更困难,因为在编译后的代码里已经找不到原来的变量名了。

现在的编译器通常不会硬性限制变量名的长度,但一般还是建议使用简短并且有意义的变量名,这样能让代码更易读,也更好维护。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题