变量名中的美元符号? 我偶然发现了一些C++代码,比如: int $T$S;
首先,我认为它是某种PHP代码或错误地粘贴在那里的东西,但它编译并运行得很好(在MSVC2008上)变量名中的美元符号? 我偶然发现了一些C++代码,比如: int $T$S;,c++,variables,visual-c++,identifier,variable-names,C++,Variables,Visual C++,Identifier,Variable Names,首先,我认为它是某种PHP代码或错误地粘贴在那里的东西,但它编译并运行得很好(在MSVC2008上) 什么类型的字符在C++中是有效的,还有其他奇怪的字符可以使用吗?< /P> < P>根据标准的唯一合法字符是字母数字。 和下划线。标准确实要求这一点 Unicode认为字母是可以接受的(但只能作为单个字符) 代码点字符)。实际上,实现提供了扩展 (也就是说,有些人接受美元)和限制(大多数人不接受所有的限制) 所需的Unicode字符)。如果你希望你的代码是可移植的, 将符号限制为26个不带重音的
<>什么类型的字符在C++中是有效的,还有其他奇怪的字符可以使用吗?< /P> < P>根据标准的唯一合法字符是字母数字。 和下划线。标准确实要求这一点 Unicode认为字母是可以接受的(但只能作为单个字符) 代码点字符)。实际上,实现提供了扩展 (也就是说,有些人接受美元)和限制(大多数人不接受所有的限制) 所需的Unicode字符)。如果你希望你的代码是可移植的, 将符号限制为26个不带重音的字母,大写或小写
据我所知,十位数字和‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘’
所有其他字符都应该是编译器扩展。它是某些编译器的扩展,不在C标准中 MSVC: 特定于Microsoft的 < >微软C++标识符前2048个字符是显著的。用户定义类型的名称由编译器“修饰”以保留类型信息。结果名称(包括类型信息)不能超过2048个字符。(有关详细信息,请参见修饰名称。)影响修饰标识符长度的因素有:
- 标识符表示用户定义类型的对象还是从用户定义类型派生的类型
- 标识符是表示函数还是从函数派生的类型
- 函数的参数数
<强> $符号也是VisualC++中的一个有效标识符。< /强>
// dollar_sign_identifier.cpp
struct $Y1$ {
void $Test$() {}
};
int main() {
$Y1$ $x$;
$x$.$Test$();
}
最新版本:
通用条款:
6.42标识符名称中的美元符号
在GNUC中,您通常可以在标识符名称中使用美元符号。这是因为许多传统的C实现都允许这样的标识符。但是,一些目标机器上不支持美元符号标识,通常是因为目标汇编程序不允许美元符号标识
“罐头”!=“应该。”在变量名中使用
$
是该语言的一个扩展,可能不适用于其他编译器(除了可能是GCC,它对所有语言扩展都有标志)。我甚至会说它会使用奇怪的字符阻塞变量名,所以不,我不想使用它,了解一下:-)标识符中使用$
在虚拟机上相当普遍,许多系统库例程的名称都类似于SYS$SOMETHING
。g++支持将其作为扩展,但如果指定-pedantic
@KeithThompson,则会发出警告:目前,gcc 4.9.3甚至不会使用-pedantic
开关发出警告。在这期间会有什么变化吗?@AlBundy:C标准允许在标识符中使用“其他实现定义的字符”。即使使用-pedantic
,也不需要任何警告(尽管我个人希望有一种简单的方法来警告这些事情,而无需为每个功能指定单独的选项)。它不仅在Microsoft的编译器中有效。G++还支持将其作为扩展。但是,是的,它是特定于编译器的,不是标准的一部分。如果您引用标准中支持您答案的特定部分,这将是一个更好的答案。@Caleb它位于明显的位置:§2.11标识符。