是的,下划线可能出现在标识符中的任何地方_a,_0_甚至_都是有效的标识符。但是有一些规则可以在您的代码中使用,哪些是为“实现”保留的(=编译器和操作系统)。
以 an 开头_然后是大写字母的标识符在任何地方都保留,您不应该自己使用它们。它们可以被编译器自由使用,也可以被未来的语言扩展使用,例如,这就是为什么 C 中的官方布尔类型被命名为_Bool。
以 an_和 a 然后小写字母开头的标识符在文件范围内保留,因此不允许您命名函数或全局变量_toto或类似名称。这些可能与库函数的名称冲突,例如
_连续多于一个的标识符由 C++ 保留用于名称修改。如果您曾经想过用 C 语言编写可从 C++ 调用的代码,则不应使用这些代码。
以 结尾的标识符_t是 POSIX 为类型保留的。如果您想避免未来在新系统上出现可移植性问题,也请避免这些问题。
保留名称还有很多其他规则,我只列出了我记得的那些_。
小智 5
标识符的书写规则
标识符只能由字母(大写和小写字母)、数字和下划线“_”组成。
标识符的第一个字母应该是字母或下划线。但是,尽管合法,但不鼓励以下划线开头的标识符名称。这是因为以下划线开头的标识符可能会与系统名称冲突。在这种情况下,编译器会抱怨它。一些以下划线开头的系统名称是 _fileno、_iob、_wfopen 等。
标识符的长度没有规则。但是,标识符的前 31 个字符由编译器区分。因此,程序中两个标识符的前 31 个字母应该不同。
前任:
int identifier;
int _identifier;
int new_identifier;
Run Code Online (Sandbox Code Playgroud)
是的,下划线可以用作标识符。举个例子:1988 年国际奥委会冠军
#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}
Run Code Online (Sandbox Code Playgroud)
至于为什么在标识符中的任何地方都允许使用下划线,答案是:标准描述了标识符的语法由至少一个nondigit 组成,后跟零个或多个数字或非数字字符
它还将非数字定义为任一以下字符中:
_ abcdefghijklmnopqrstu vwxyz
ABCDEFGHIJKLMNOPQRSTU VWXYZ
和数字是:
0 1 2 3 4 5 6 7 8 9
因此,遵循此规则,_____标识符与my_identifieror一样有效,_000000AAFF___
但请注意,存在保留标识符之类的东西,这些也在标准中进行了描述。再次
回答为什么问题:因为标准是这样说的;-P