当前位置: 首页 > 知识库问答 >
问题:

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

施永贞
2023-08-15

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

共有4个答案

韩宏朗
2023-08-15

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

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

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

陆阳曜
2023-08-15

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

张姚石
2023-08-15

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

劳高爽
2023-08-15

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

 类似资料:
  • 下面这样写切换语言的时候 {{welcome1}} 和 {{welcome2}} 都不会变,只能 {{welcome3}} 这么写,为什么?

  • 变量被编译器声明为const,导致无法编译

  • 问题内容: 我试图编译以下代码: 当我尝试编译时,它抛出: 错误:(5,41)Java:不兼容的类型:可能从int到char的有损转换 问题是,它的工作,如果我写,或。 我检查了一下,尝试时编译器抛出了类似的错误,但是我看不到’c’的值可以在原始函数中通过’char’类型的最大值。 问题答案: 是一个,因为操作数经过二进制数值提升: 是一个 是一个 因此必须扩展以使其兼容添加;表达式的结果是。 至

  • 问题内容: 我听说在某些情况下,由于JIT优化,Java程序或Java程序的某些部分比C ++(或其他预编译的代码)中的“相同”代码执行得更快。这是由于编译器能够确定某些变量的范围,避免某些条件并在运行时提取类似的技巧。 您能否举一个(或更佳的)例子,在哪里适用?也许概述了编译器能够优化字节码的确切条件,超出了预编译代码的范围? 注意: 此问题 不是 关于将Java与C ++进行比较。关于JIT编

  • 有一个不希望的C样式强制转换,我无法防止编译。不需要的强制转换执行从某个类的对象到其他类的非常量引用的C样式强制转换。这些类是不相关的。同时,我喜欢支持从同一个类的对象到常量引用的C样式转换。我提供了一个公共转换操作符来支持理想的强制转换。在这种情况下,似乎无法防止不希望的强制转换。 对非常量引用的强制转换未能生成(“Sandbox::B::操作符Sandbox::A&()”(在第30行声明)不可

  • 以下代码在C++11中编译成功: 它包括用于现代C++的JSON。一个工作示例在这个Wandbox中。 JSON变量被隐式转换为字符串。但是,如果我取消最后一行的注释,这是一个显式转换,它将无法编译。这里的编译结果。 除了这个json库的特殊细微差别之外,如何编写一个类,使隐式转换工作,而显式转换不工作? 是否有某种构造函数限定符允许这种行为?