为什么在C中以$开头变量名?

Jay*_*ody 7 c variables naming

我的印象是,只能用字母和_开头变量名,但是在进行测试时,我还发现可以用$开头变量名,如下所示:

码

#include <stdio.h>

int main() {
    int myvar=13;
    int $var=42;
    printf("%d\n", myvar);
    printf("%d\n", $var);
}
Run Code Online (Sandbox Code Playgroud)

输出量

13
42
Run Code Online (Sandbox Code Playgroud)

根据此资源,它说您不能在C中以$开头变量名,这是错误的(至少在使用我的gcc版本Apple LLVM版本10.0.1(clang-1001.0.46.4)进行编译时)。我在网上找到的其他资源似乎也表明变量不能以$开头,这就是为什么我感到困惑的原因。

这些文章难道没有提到这个细微差别吗?如果是,为什么这是C的功能?

Eri*_*hil 6

在C 2018标准中,第6.4.2节第1段允许实现允许标识符中包含其他字符。

它定义一个标识符为标识符非数字字符,后跟任意数量的标识符非数字或数字字符。它将数字定义为“ 0”至“ 9”,并且将标识符非数字字符定义为:

  • 一个非数字,这是下划线的一个,“a”至“Z”或“A”至“Z”,
  • 一个普遍的字符名称,或
  • 其他实现定义的字符。

因此,实现可以定义标识符中允许的其他字符。

包含在通用字符名称中的字符是C标准附件D中列出的字符。

您链接到的资源在几个地方是错误的:

C中的变量名称由字母(大写和小写)和数字组成。

这是错误的。标识符可以在每个符合的实现中包括下划线和上述通用字符,以及在允许它们的实现中包括其他字符。

不允许$-仅字母和_

这是不正确的。C标准不需要实现允许使用“ $”,但是它并不禁止实现允许使用“ $”。一些实现而不是其他实现允许使用“ $”。可以说,它不是严格符合 C程序的一部分,而可以是符合 C程序的一部分。