为什么在标识符中使用令牌会出错?

Why the usage of tokens in an identifier gets errored?

在标识符中使用“-”导致错误:

‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘-’ token

为什么会这样?

您不能在标识符中使用连字符,因为它 C 语言中的标记,尽管您有争议。它是减法运算符,或一元减号。

如果允许标识符包含 - 字符,您希望以下代码会发生什么情况?

int some = 42;
int value = 12;
int some-value = 99;
printf("%d\n", some-value);

是否应该打印 some-value 变量 99?或者 some - value 表达式,计算结果为 30?

如果您想要那种格式(带有明显分隔符的小写单词),最好只使用下划线字符 _。这就是俗称的蛇壳:

int some_value = 99;

'-' is not used as token in c standard.

你的前提是错误的。 - 用作令牌。引用自 C11 标准草案:

6.4 Lexical elements

Syntax

token:
    ...
    punctuator

6.4.6 Punctuators

Syntax

punctuator:
... - ...

省略号表示省略。


When will '-' character be represented in an identifier?

从来没有,我怀疑。减号运算符会产生歧义。

- 属于 class 个标记,称为 标点符号 ,其中包括 .!*+ 等。标点符号不能是标识符的一部分。

标识符中唯一可以使用的字符是:

  • 下划线 _;
  • 大写和小写拉丁字母字符(A-Za-z);
  • 小数位数(0-9);
  • 通用字符名称(\Uxxxx\uxxxx,其中x代表十六进制数字);
  • 其他 implementation-defined 个字符(即 unicode 或扩展字符)。

此外,标识符不得以数字字符开头 - 编译器将拒绝像 2good7Up 这样的标识符。尽管编译器通常不强制执行它,但您不应在标识符中使用前导下划线 - 此类名称保留给实现,这意味着标准库 headers 和其他地方的代码。如果您使用前导下划线命名您的变量或函数之一,则可能与标准 header.

中声明的变量或函数名称冲突