【问题标题】:Is there nothing wrong with digits in identifier name?标识符名称中的数字没有问题吗?
【发布时间】:2012-12-08 07:14:37
【问题描述】:

因为在 C\C++\Java -

int 2a ; //invalid suffix "a" on integer constant

尽管它是有效的语法,但变体名称的其余部分中的数字没有什么问题吗?

喜欢-

int num1 ;
int num_1st ;
int num_2nd ; 

【问题讨论】:

  • int num_1st; int num_2nd; 更好地表示为int num[2],您可以将其用作num[0]num[1]

标签: java c++ c syntax defensive-programming


【解决方案1】:

标识符不能以数字开头。它必须以字母或下划线开头。

【讨论】:

  • 我认为他在实践中询问的更多是在变量名中使用数字是否不好。他承认不能以数字开头。
【解决方案2】:

我从未听说过任何人(例如,任何编码标准/指南)对标识符中的数字有问题。尽管如此,太多可以表明向量或数组可能更可取——即使只有两个,你的num_1stnum_2nd 可能比numbers[2] 更好。

【讨论】:

    【解决方案3】:

    答案是,不,标识符名称的其余部分中的数字没有任何问题。

    【讨论】:

    • 当然,您标识符名称其余部分的数字没有问题,但我尝试使用a3.5,编译器说我疯了。
    • @EricPostpischil 好吧,在a3.5 中,您正尝试使用5 作为成员变量名称,并且由于它以数字开头,因此它不是有效的标识符名称。另外两个不是 Java 中的有效数字,正如此事的最终权威所报告的那样,javac(试试float f = ½;float f = π;);-)
    【解决方案4】:

    只要变量名有意义,使用数字作为名称的一部分绝对不是坏事。当然,有大量类似名称的变量,最后只有一个数字来区分它们,这可能是糟糕设计的标志。

    我很确定,不允许标识符以数字开头的原因是它使编写解析器变得更加容易:

    c = getchar(); 
    ungetc(c);
    if (isdigit(c)) 
       token = number(); 
    else 
       token = identifier(); 
    

    【讨论】:

      【解决方案5】:

      变量标识符必须以字母或下划线开头,但其余字符可以是字母、下划线或数字。

      您甚至可以对变量进行 decalre: int _ = 0;

      或者如果您熟悉正则表达式,则可以将其模式化为: "[a-zA-Z_]\w*?\b"

      \w* 在哪里?部分不是必须的。

      【讨论】:

        【解决方案6】:

        这是标识符的规则,它必须以字母或下划线开头,之后只允许数字。

        【讨论】:

        • 这表述有误。 “...之后只允许数字” 表示(英文)只有第一个字符可以是字母或下划线。这显然是不正确的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-21
        • 1970-01-01
        • 2015-04-02
        • 1970-01-01
        • 2013-01-13
        相关资源
        最近更新 更多