$变量名?

Val*_*ond 26 c++ variables identifier variable-names visual-c++

我偶然发现了一些像这样的(c ++)代码:

int $T$S;
Run Code Online (Sandbox Code Playgroud)

首先,我认为它是某种PHP代码或者错误地粘贴在那里但它编译并运行得很好(在MSVC 2008上).

什么类型的字符对C++中的变量有效,是否还有其他奇怪的字符可以使用?

Jam*_*nze 29

根据标准,唯一合法的字符是字母数字和下划线.该标准确实要求几乎任何Unicode认为字母是可接受的(但仅作为单个代码点字符).在实践中,实现提供扩展(即一些接受$)和限制(大多数不接受所有必需的Unicode字符).如果您希望代码可移植,请将符号限制为26个非重音字母,大写或小写,十位数字和"_".

  • 如果您引用了支持您答案的标准的特定部分,这将是一个更好的答案。 (2认同)

phu*_*clv 12

我刚刚做了一个搜索,发现这只在VC中有效,而不是C标准

微软特定

只有Microsoft C++标识符的前2048个字符才有意义.用户定义类型的名称由编译器"修饰"以保留类型信息.结果名称(包括类型信息)不能超过2048个字符.(有关更多信息,请参阅装饰名称.)可能影响装饰标识符长度的因素有:

  • 标识符是表示用户定义类型的对象还是从用户定义类型派生的类型.

  • 标识符表示函数还是从函数派生的类型.

  • 函数的参数个数.

美元符号也是Visual C++中的有效标识符.

// dollar_sign_identifier.cpp
struct $Y1$ {
    void $Test$() {}
};

int main() {
    $Y1$ $x$;
    $x$.$Test$();
}
Run Code Online (Sandbox Code Playgroud)

https://msdn.microsoft.com/en-us/library/partnercenter/565w213d(v=vs.90).aspx
http://msdn.microsoft.com/en-us/library/565w213d.aspx


编辑: gcc也支持此扩展

6.34美元标识符号

在GNU C中,您通常可以在标识符名称中使用美元符号.这是因为许多传统的C实现允许这样的标识符.但是,少数目标计算机不支持标识符中的美元符号,这通常是因为目标汇编程序不允许这些符号.

http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar-Signs

  • 它不仅仅*在Microsoft的编译器中有效.G ++也支持它作为扩展.但是,它是特定于编译器的,而不是标准的一部分. (5认同)