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个非重音字母,大写或小写,十位数字和"_".
phu*_*clv 12
我刚刚做了一个搜索,发现这只在VC中有效,而不是C标准
微软特定
只有Microsoft C++标识符的前2048个字符才有意义.用户定义类型的名称由编译器"修饰"以保留类型信息.结果名称(包括类型信息)不能超过2048个字符.(有关更多信息,请参阅装饰名称.)可能影响装饰标识符长度的因素有:
标识符是表示用户定义类型的对象还是从用户定义类型派生的类型.
标识符表示函数还是从函数派生的类型.
函数的参数个数.
美元符号也是Visual C++中的有效标识符.
Run Code Online (Sandbox Code Playgroud)// dollar_sign_identifier.cpp struct $Y1$ { void $Test$() {} }; int main() { $Y1$ $x$; $x$.$Test$(); }
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