在C语言中,下划线可以在标识符中的任何位置使用吗?
我有一个简单的问题:我可以在标识符中的任何位置使用下划线吗在C语言中,下划线可以在标识符中的任何位置使用吗?,c,C,我有一个简单的问题:我可以在标识符中的任何位置使用下划线吗 如果是,请给出一个例子,如果不是,请解释原因。下划线显示为普通字母/字符 除此之外,通常还有一些编码准则限制您使用下划线,例如,在构造函数中,参数被命名为_name,而类变量的名称是name。编写标识符的规则 标识符只能由字母(大写和小写字母)、数字和下划线“\u1”组成 标识符的第一个字母应为字母或下划线。但是,不鼓励在标识符名称开头加下划线,尽管这是合法的。这是因为,以下划线开头的标识符可能与系统名称冲突。在这种情况下,编译器将对
如果是,请给出一个例子,如果不是,请解释原因。下划线显示为普通字母/字符
除此之外,通常还有一些编码准则限制您使用下划线,例如,在构造函数中,参数被命名为_name,而类变量的名称是name。编写标识符的规则
是的,下划线可能出现在标识符中的任何地方,
\u a
、\u 0
甚至\u
都是有效的标识符。但是有一个规则,您可以在代码中使用这些规则中的哪些,这些规则是为“实现”(=编译器和操作系统)保留的
- 以
和a开头的标识符,然后是大写字母,到处都保留着,您不应该自己使用它们。它们可以由编译器自由使用,也可以由未来的语言扩展使用,例如,这就是为什么C中的官方布尔类型命名为\u
\u Bool
- 以
开头的标识符和以小写字母开头的标识符保留在文件范围内,因此不允许您命名函数或全局变量\u
或类似的名称。这些可能与库函数的名称冲突,例如\u toto
<> > >具有不止一个<代码> > <代码>的标识符,由C++保留,用于名称修改。如果你曾经想到在C++中编写C代码可调用的代码,你就不应该使用这些代码。
- POSIX为类型保留以
结尾的标识符。如果您想避免将来在新系统上出现可移植性问题,也要避免这些问题\t
保留名称还有很多其他规则,我只列出了那些我记得的关于
\uu
的规则。是的,下划线可以用作标识符。下面是一个例子:
#define(定义)它可以在标识符中的任何位置使用。例如\define THIS\u IS\u HASH\u define“junk”
和int THIS\u IS\u int=5代码>看看“5.4命名变量、函数和文件”,你甚至可以说int\u42代码>@devnull肯定有一些IOCCC条目滥用下划线。对OP:我对我的答案进行了编辑,以解决你问题的原因部分。标识符\u 45
允许吗?以及\u 45a
,允许吗?@MOHAMED Yes,两者都是。是的,它们都是有效的。@MOHAMED:你所需要做的就是将你的测试名称与这三条非常简单且明确的规则进行比较。等等,这是pi计算器吗?@DennisMeng:是的,但它是用K&R编写的,不是ANSI C。。。不过,还是挺不错的:)
int identifier;
int _identifier;
int new_identifier;
#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}