【发布时间】:2014-06-28 18:36:33
【问题描述】:
我从不使用 clang。
而我无意中发现了这段代码:
#include <iostream>
void функция(int переменная)
{
std::cout << переменная << std::endl;
}
int main()
{
int русская_переменная = 0;
функция(русская_переменная);
}
将编译正常:http://rextester.com/NFXBL38644 (clang 3.4 (clang++ -Wall -std=c++11 -O2))。
这是一个clang扩展吗?为什么? 谢谢。
UPD:我更想问为什么clang做出这样的决定?因为我从来没有发现有人想要比 c++ 标准现在拥有更多字符的讨论(2.3,rev. 3691)
【问题讨论】:
-
@quantdev 我认为 OP 显然意味着西里尔字母中的符号被接受为these aren't here
-
它们是西里尔字母,所以它们被标识符的定义所覆盖,还是我遗漏了什么?
-
@Petesh 是的,标识符中允许使用通用字符,我们可以在我对Can you start a class name with a numeric digit? 的回答中找到允许使用的语法......可能还有其他线程也涵盖了这一点。
-
@grisha - 你已经接受了半答案。完整的答案就在它下面。这种现象与两件事有关:(1) 编译器的输入编码(即一种将这些字符输入编译器的方法),以及 (2)标识符中允许的字符。允许使用西里尔字符,因此只需在编译器中使用支持多字节的源文件编码即可。
标签: c++ clang identifier