variables名$?
我偶然发现了一些(c ++)代码:
int $T$S;
首先,我认为这是某种PHP代码或错误的粘贴在那里,但它编译和运行良好(在MSVC 2008)。
什么样的字符对C ++中的variables有效,还有其他奇怪的字符可以使用吗?
符合标准的唯一合法字符是字母数字和下划线。 标准确实要求几乎任何Unicode认为字母是可以接受的(但只能作为单个代码点字符)。 在实践中,实现提供了扩展(即一些接受$)和限制(大多数不接受所有需要的Unicode字符)。 如果您希望自己的代码具有便携性,请将符号限制为26个不重复的字母,大写或小写,十个数字和“_”。
我刚刚做了一个search,发现这只适用于VC,而不是C标准
微软具体
只有Microsoft C ++标识符的前2048个字符是重要的。 用户定义types的名称由编译器“装饰”以保存types信息。 结果名称(包括types信息)不能超过2048个字符。 (请参阅装饰名称了解更多信息。)可能影响装饰标识符长度的因素是:
标识符是表示用户定义types的对象还是表示从用户定义types派生的types。
标识符是表示从函数派生的函数还是types。
函数的参数个数。
美元符号也是Visual C ++中的有效标识符。
// 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
据我所知,只有字母 (大写和小写), 数字 ( 0
)和_
对variables名是有效的(注意:variables名不能以数字开头)。
所有其他字符应该是编译器扩展。