首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为啥很多编程语言不允许用数字开头作为变量名

2013-12-30 
为什么很多编程语言不允许用数字开头作为变量名?换句话说99ab,8c这样的名称,如果能作为变量名,会引起什么

为什么很多编程语言不允许用数字开头作为变量名?
换句话说99ab,8c这样的名称,如果能作为变量名,会引起什么问题嘛?

编译器只需要判断如果一串名称不是纯数字,那么它就是变量名。这并不会引起什么歧义啊。

有么有什么编程语言是允许变量名用数字开头的?

[解决办法]
有一些字面值是这样的:100L
[解决办法]
o,shit!
其实,更重要的,有些字面值是这样的:100

引用:
有一些字面值是这样的:100L

[解决办法]
http://www.zhihu.com/question/19581495
主要是工程折衷。

程序语言的分析分词法和语法两部分。词法分析主要用的是正规文法,也就是三型文法。这类文法主要采用正则表达式分析。正则文法分析器的特点是它是不回溯的,所以实现很简单。

如果一个变量以数字开头,那么分析器就必须在遇到第一个或第二个英文字符的时候回溯来确定是否是数字、变量名还是词法错误,这时候就变成了二型文法。二型文法分析器的好处是支持回溯和递归语法(所以语法分析是靠它的),但是缺点是状态机相比正则文法状态大大增加,而且代码写起来更困难。

考虑到词法分析部分只是用来断字,我们实在是没有为了支持变量名以数字开头这么一个小功能而让整个词法分析部分用二型文法写。

故,最后大家都默认了变量要避免用数字开头。
[解决办法]
引用:
Quote: 引用:

o,shit!
其实,更重要的,有些字面值是这样的:100

Quote: 引用:

有一些字面值是这样的:100L


编译器可以判断,100的3个数字都是数字,所以它是一个数字而不是变量。
100L,编译器可以判断一个串前面都是数字,后面是L或者f,这样也是数字。
其他的情况是变量。

这个对于编译器的实现应该不是什么困难的事情啊。
还请指教!

早期的C语言就是为了写编译器简单方便制定的,所以函数指针,函数指针数组,函数返回函数指针等声明很复杂。
不能以数字开头也是为了解析方便
C++11已经提供了语法支持,让10km这样的写法成为现实。
[解决办法]
0l
8h
100l
100U
1000f
100.0F
100.0L
1e-5
0x12334
0xFFFF
0xFFFFL
01234
-11.3e-12

这许多,都是数字,你现在看看,对于追求简单的C来说,
如果数字可以表示 标志符,解析起来还是挺麻烦的。

当时几乎所有语言,都追求简单,除了几个大型语言(比如 ADA 没用过,似乎比较复杂),或者专用语言(商用语言 Cobol, 据说有许多种 0)。

热点排行