<分区>
最近看到这样的代码:
int $ = 123;
那么为什么 '$' 可以出现在 C 中的标识符中?
在C++中也是一样吗?
标签 c
<分区>
最近看到这样的代码:
int $ = 123;
那么为什么 '$' 可以出现在 C 中的标识符中?
在C++中也是一样吗?
最佳答案
这不是好的做法。通常,您应该只在标识符中使用字母数字字符和下划线 ([a-z][A-Z][0-9]_
)。
与其他语言(bash、perl)不同,C 不使用$
来表示变量的用法。因此,它在技术上是有效的。从 C++ 17 开始,这是符合标准的,请参阅草案 n4659。在 C 中,它很可能属于 C11,6.4.2。这意味着现代编译器似乎确实支持它。
至于你的C++问题,让我们测试一下吧!
int main(void) {
int $ = 0;
return $;
}
在 GCC/G++/Clang/Clang++ 上,这确实可以编译并运行得很好。
编译器获取源代码,将其词法化为 token 流,将其放入抽象语法树 (AST),然后使用它来生成代码(例如汇编/LLVM IR)。您的问题实际上只围绕第一部分(例如词法分析)。
C/C++ 的语法(因此词法分析器实现)不将 $
视为特殊的,不像逗号、句点、瘦箭头等...因此,您可能会从下面的 C 代码中的词法分析器是这样的:
int i_love_$ = 0;
在词法分析器之后,这变成了这样的 token 流:
["int", "i_love_$", "=", "0"]
如果您在哪里获取此代码:
int i_love_$,_and_.s = 0;
词法分析器会输出如下 token 流:
["int", "i_love_$", ",", "_and_", ".", "s", "=", "0"]
如您所见,由于 C/C++ 不将 $ 等字符视为特殊字符,因此它的处理方式与其他字符(如句点)不同。
关于c - 为什么C中标识符可以包含 '$'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68334043/