为什么在标识符中使用令牌会出错?
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-Z
、a-z
);
- 小数位数(
0-9
);
- 通用字符名称(
\Uxxxx
或\uxxxx
,其中x
代表十六进制数字);
- 其他 implementation-defined 个字符(即 unicode 或扩展字符)。
此外,标识符不得以数字字符开头 - 编译器将拒绝像 2good
或 7Up
这样的标识符。尽管编译器通常不强制执行它,但您不应在标识符中使用前导下划线 - 此类名称保留给实现,这意味着标准库 headers 和其他地方的代码。如果您使用前导下划线命名您的变量或函数之一,则可能与标准 header.
中声明的变量或函数名称冲突
在标识符中使用“-”导致错误:
‘=’, ‘,’, ‘;’, ‘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-Z
、a-z
); - 小数位数(
0-9
); - 通用字符名称(
\Uxxxx
或\uxxxx
,其中x
代表十六进制数字); - 其他 implementation-defined 个字符(即 unicode 或扩展字符)。
此外,标识符不得以数字字符开头 - 编译器将拒绝像 2good
或 7Up
这样的标识符。尽管编译器通常不强制执行它,但您不应在标识符中使用前导下划线 - 此类名称保留给实现,这意味着标准库 headers 和其他地方的代码。如果您使用前导下划线命名您的变量或函数之一,则可能与标准 header.