为什么变量以数字开头是非法的?

Nic*_*k.h 5 programming-languages

为什么变量以数字开头是非法的?我知道这是一个惯例,但是原因是什么?

编辑:我的意思是像"1foo"或"23bar"这样的变量不仅仅是"3"之类的数字

cdh*_*wie 6

因为大多数语言中的词法分析器都会假设您正在尝试指定数字文字.然后你可以声明数字文字无法区分的变量,从而产生一个巨大的模糊重磅炸弹.


Pet*_*ham 0

在 Prolog、Erlang 和 Fortran 的某些早期版本等语言中,出于完全不同的原因,您几乎必须这样做。

Prolog/Erlang 没有变量赋值,它们有统一。IIRC,如果X是变量,则代码如下2 = XX = 2如果X可能值为2,则处理or。因此,如果X已经与一个值统一,那么该值必须是2,如果不是,则X从此变为2 。所以写3 = 3是好的 - 它应该成为一个空操作,并且2 = 3总是失败 - 要么是 Prolog 中的不匹配,要么是(我认为)Erlang 中的运行时错误。数字的行为就像已经与数字所代表的值统一的变量。

在早期的 Fortran 中(抱歉二十年来没有使用 Fortran 并且忘记了它的语法),所有函数参数都是通过引用传递的,所以如果你有一个相当于void foo ( int &x ) { x = 3; }并用数字调用它的函数,编译器将存储该数字放在静态变量中并传递它。因此调用foo (2)会将静态存储值 2 设置为 3。如果它碰巧在其他地方对文字 2 使用相同的静态变量,例如使用文字 调用另一个函数2,那么传递给第二个函数的值将是 3 。

因此,您可以拥有在语法上与数字相同的变量,只要它们自动初始化为文字的值即可。但如果你允许它们是可变的而不是纯粹的变量,奇怪的事情就会比比皆是。