Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can C++;cpp文件中定义为特殊符号的变量β;_C++_C++11_Variables_Visual C++ - Fatal编程技术网

C++ Can C++;cpp文件中定义为特殊符号的变量β;

C++ Can C++;cpp文件中定义为特殊符号的变量β;,c++,c++11,variables,visual-c++,C++,C++11,Variables,Visual C++,我们是否可以使用特殊字符在c++/c中定义变量,例如 双ε,µ,β,ϰ 如果是,如何实现这一点?是的,您可以使用特殊字符,但不能全部使用。您可以在下面的链接中找到允许的 您可以在页面上找到关于如何构建标识符(使用unicode授权字符列表)的详细说明 标识符是,引用 任意长的数字、下划线、小写和大写拉丁字母以及大多数Unicode字符序列(详见下文)。有效标识符必须以非数字字符(拉丁字母、下划线或Unicode非数字字符)开头。标识符区分大小写(小写和大写字母是不同的),每个字符都是重要的 此外

我们是否可以使用特殊字符在c++/c中定义变量,例如
双ε,µ,β,ϰ


如果是,如何实现这一点?

是的,您可以使用特殊字符,但不能全部使用。您可以在下面的链接中找到允许的

您可以在页面上找到关于如何构建标识符(使用unicode授权字符列表)的详细说明

标识符是,引用

任意长的数字、下划线、小写和大写拉丁字母以及大多数Unicode字符序列(详见下文)。有效标识符必须以非数字字符(拉丁字母、下划线或Unicode非数字字符)开头。标识符区分大小写(小写和大写字母是不同的),每个字符都是重要的


此外,需要对Unicode字符进行转义。

根据CPP标准(N4713)的工作草案

5.10标识符[法名]

标识符是任意长的字母和数字序列。标识符中的每个通用字符名称应指定一个字符,该字符在ISO10646中的编码属于表2中规定的范围之一初始元素不得为通用字符名,指定编码属于表3规定范围之一的字符。

当我们看表3时:

表3-最初不允许的字符范围(组合字符)

您提到的符号是希腊字母,范围从
U+0370
U+03FF
,扩展的希腊字母集范围从
U+1fx
U+1FFx
。这两个范围都允许作为标识符的初始元素

请注意,并非所有编译器都支持此功能。

带有
-std=c++17
选项的GCC 8.2无法编译。
但是,带有
-std=c++17
选项的Clang 7.0可以编译


由于问题被标记为Visual Studio:只需按照预期编写代码即可

doubleβ=0.1

保存文件时,Visual Studio将警告您需要将文件另存为Unicode。接受它,它就会起作用。尽管VisualStudio不支持大多数其他C99扩展,但在C模式下也可以使用


但是,从g++8.2开始,g++仍然不支持标识符中直接使用的非ASCII字符,因此代码实际上是不可移植的。

此处的完整答案:您可以使用宏将它们定义为其他内容。例如,
#定义ββ
,然后使用
β
作为标识符的名称。我不推荐它。没有C/C++这样的东西。这是两种具有不同规则的不同语言。请决定要使用哪种语言并相应地更新标记。请尝试使用编译选项
-fextended identifiers
。有关更多信息,请检查此处的答案:@stackoverflower:错误的编译器-这被标记为visual C++允许任何不在这些范围内的字符<代码>U+0370
U+03FF
不在您引用的范围内(
0300-036F
在前面结束)。排除
0300-036F
是有道理的。这些是组合字符/变音符号,例如'iná。每一个Unicode标准,组合标记应该遵循它们修改的字符,逻辑上将它们从任何其他Unicode字符串的开始排除,而不只是C++标识符。
0300-036F 1DC0-1DFF 20D0-20FF FE20-FE2F