为什么C标识符不能以数字开头

       C语言的标识符在不与已有函数名(系统或者自定义),关键字重复的情况下,可以使用数字,字母(区分大小写)和下划线构成,如Wanvote123,但是不能以数字开头,这是为什么呢。

       根据网上的资料和自己的理解,这是为了方便区分变量和常量,从而便于编译器编译。

     例如,如果允许数字开头命名标识符,则2E3可以表示变量名,也可以表示常量:2*10^3, 同样地,0x7C7D(16进制数),015(8进制数),0x45Lu(16进制无符号长整型)具有二义性。

       况且,C语言规定变量命名只能用这三种字符,但是并没有规定一个变量中三种字符的个数,C支持如“_”(亲测有效),"___"(亲测有效),"aabb"这样的变量名,如果支持以数字开头而又不修改变量中每种字符的个数的规定,则像“123”也是合法的变量名,这样一来所有的数字常量都可能看做变量,这给编译器编译工作带来极大的负担——这还是先解决能够区分常量变量的前提下,如变量可以以数字开头,但是不能全是数字,不能和“0x7C7D”,"2E3"等等计数法格式相同,等等等等,即精心设计一套命名规则——既支持以数字开头,又与已有的常量表示法则互斥,显然,这样做花费的精力太大,并且对于程序员记忆使用而言也过于复杂,与其这样,还不如干脆不支持以数字开头命名常量。(其实C的设计者们是不是先设计了常量的表示法,然后再在它的余集中选择相对的简单的变量命名法则呢。)

       所以,综上,以数字开头的变量名与C支持的常量表示法有重合的部分,编译时会产生二义性;即使重新设计支持以数字开头的变量命名法则,用于区分变量名/常量名的开销也太大,得不偿失,故不支持以数字开头。


声明:除已注明的引用外,文章系作者原创,引用转载请注明出处,如有必要请联系作者。

猜你喜欢

转载自blog.csdn.net/prolayman/article/details/79713399