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名不能以数字开头)。

所有其他字符应该是编译器扩展。