我们可以在c ++ / c中使用特殊字符定义变量吗? 双重ε,µ,β,ϰ;
如果是,如何实现?
答案 0 :(得分:6)
根据CPP标准(N4713)的工作草案,
5.10标识符[lex.name]
...
标识符是字母和数字的任意长序列。标识符中的每个通用字符名称均应指定一个字符,其字符在ISO 10646中的编码应属于表2中指定的范围之一。初始元素不得为表示其编码所属字符的通用字符名称。进入表3中指定的范围之一。
当我们看表3时:
表3 —最初禁止的字符范围(组合字符)
0300-036F 1DC0-1DFF 20D0-20FF FE20-FE2F
您提到的符号是希腊字母,范围从U+0370
到U+03FF
,扩展的希腊字母集的范围从U+1F0x
到U+1FFx
,{{3} }。这两个范围都可以用作标识符的初始元素。
请注意,并非所有编译器都对此提供支持。
带有-std=c++17
选项的GCC 8.2无法编译。
但是,带有-std=c++17
选项的Clang 7.0会进行编译。
答案 1 :(得分:1)
是的,您可以使用特殊字符,但不能全部使用。您可以在下面的链接中找到允许的对象。
您可以在Identifiers - cppreference.com页面上找到有关如何构建标识符(带有Unicode授权字符的列表)的详细说明。
引号是
任意长序列的数字,下划线,小写和大写拉丁字母以及大多数Unicode字符(有关详细信息,请参见下文)。有效标识符必须以非数字字符(拉丁字母,下划线或Unicode非数字字符)开头。标识符区分大小写(小写和大写字母是不同的),并且每个字符都有意义。
此外,需要对Unicode字符进行转义。
答案 2 :(得分:0)
由于该问题被标记为Visual Studio:只需编写所需的代码即可。
double β = 0.1;
保存文件时,Visual Studio会警告您需要将文件另存为Unicode。接受它,它就会起作用。 AFAICT,即使Visual Studio不支持大多数其他C99扩展,它也可以在C模式下工作。
但是,从g ++ 8.2开始,g ++仍不支持直接在标识符中使用的非ASCII字符,因此该代码实际上无法移植。