2

我有一个简单的问题:我可以在标识符的任何地方使用下划线吗?

如果是,请举例,如果不是,请解释原因。

4

4 回答 4

7

是的,下划线可能出现在标识符中的任何地方,_a甚至_0_都是_有效的标识符。但是有一个规则,您可以在代码中使用其中的哪些规则,这些规则是为“实现”(=编译器和操作系统)保留的。

  • 以 an 和 a 开头的标识符_在任何地方都保留,您不应该自己使用它们。它们可以被编译器自由使用,也可以被未来的语言扩展使用,例如,这就是为什么 C 中的官方布尔类型被命名为_Bool.

  • 以 an 开头的标识符,_然后是小写字母在文件范围内保留,因此不允许您命名函数或全局变量_toto或类似名称。这些可能与库函数的名称冲突,例如

  • 连续不止一个_的标识符被 C++ 保留用于名称修改。如果你曾经想过用 C 编写可从 C++ 调用的代码,你不应该使用这些。

  • _tPOSIX 为类型保留以结尾的标识符。如果您想避免未来在新系统上出现可移植性问题,也请避免这些问题。

保留名称还有很多其他规则,我只列出了我记得的那些_

于 2013-11-14T07:47:42.467 回答
5

是的,下划线可以用作标识符。举个例子:1988 年 IOCCC 冠军

#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
        _-_-_-_-_-_-_-_
            _-_-_-_
}

至于为什么在标识符的任何地方都允许使用下划线,答案是:该标准描述了标识符的语法,该标识符由至少一个nondigit组成,后跟零个或多个数字或非数字字符
它还将nondigits定义为一个以下字符:

_ abcdefghijklmnopqrstu vwxyz
ABCDEFGHIJKLMNOPQRSTU VWXYZ

和数字是:

0 1 2 3 4 5 6 7 8 9

因此,遵循此规则,标识符与or_____一样有效, 但请注意,存在保留标识符之类的东西,这些也在标准中进行了描述。再次 回答为什么的问题:因为标准是这样说的;-Pmy_identifier_000000AAFF___

于 2013-11-14T08:16:44.210 回答
5

写标识符的规则

  1. 标识符只能由字母(大写和小写字母)、数字和下划线“_”组成。

  2. 标识符的第一个字母应该是字母或下划线。但是,不鼓励使用下划线开头的标识符名称,尽管它是合法的。这是因为,以下划线开头的标识符可能与系统名称冲突。在这种情况下,编译器会抱怨它。一些以下划线开头的系统名称是 _fileno、_iob、_wfopen 等。

  3. 标识符的长度没有规则。但是,编译器会区分标识符的前 31 个字符。因此,程序中两个标识符的前 31 个字母应该不同。

前任:

    int identifier;
    int _identifier;
    int new_identifier;
于 2013-11-14T07:31:58.533 回答
0

下划线被视为普通字母/字符

MSDN 标识符说明

除此之外,经常有一些编码准则限制您使用下划线,例如在构造函数中,参数被命名为_name,其中类变量的名称为name。

于 2013-11-14T07:31:55.203 回答