C++ 是'char#u3=&x27;c';`在C和C+中有效+;?
考虑到这一点,我将变量名声明为带下划线的数字C++ 是'char#u3=&x27;c';`在C和C+中有效+;?,c++,c,variables,identifier,C++,C,Variables,Identifier,考虑到这一点,我将变量名声明为带下划线的数字 #include <stdio.h> int main() { char _3 = 'c'; printf("%c\n",_3); } #包括 int main() { char_3='c'; printf(“%c\n”,_3); } 我想知道,C和C++的工作很好。所以,它有效吗?所有变量名必须以字母表中的字母或字母开头 强调。所以,是的,它是有效的,除非您将它放在文件范围内。(不过要小心使用双下划线,它是为编译器内部
#include <stdio.h>
int main()
{
char _3 = 'c';
printf("%c\n",_3);
}
#包括
int main()
{
char_3='c';
printf(“%c\n”,_3);
}
我想知道,C和C++的工作很好。所以,它有效吗?所有变量名必须以字母表中的字母或字母开头 强调。所以,是的,它是有效的,除非您将它放在文件范围内。(不过要小心使用双下划线,它是为编译器内部使用而保留的) 然而,我不建议使用这样的名称的变量,因为这可能会让读者感到困惑 < C++ 2003标准: 17.4.3.1.2全局名称[lib.Global.names] 某些名称和函数签名集始终保留给实现:
- 每个名称包含一个双下划线(u)或以下划线开头,后跟一个大写字母(2.11)的,都保留给实现以供任何使用
- 每个以下划线开头的名称都保留给实现,以用作全局命名空间中的名称。165
它在除全局范围1之外的任何范围内都有效 C++17-
此外,一些标识符被保留以供C++使用 实施,不得以其他方式使用;没有诊断结果 必需的
- 每个以下划线开头的标识符都保留给实现,以用作全局命名空间中的名称
boost
:std::bind的占位符
C有类似的措辞:
C11-
每个标题声明或定义其标题中列出的所有标识符
关联的子类,并可选地声明或定义标识符
在其相关的未来库说明子条款中列出,以及
始终保留用于任何用途或用作
文件作用域标识符
- 所有以下划线开头的标识符始终保留为普通和标记中具有文件范围的标识符 名称空间。
1-不是一个规范性术语,只是两个标准所用术语的一种巴斯德化。
它可以编译吗?@alk是的,它可以编译。它是合法的,但你为什么要这么做?对于一个变量来说,这是一个无用的名字。我对此投了反对票,因为它没有显示任何研究成果。搜索“C有效变量名”给出了答案。@Peter-此特定代码没有UB。名称隐藏和解析保证了这一点。
\u c
不在全局名称空间中。@Olaf-\u c
?不确定我在C++上跟随你,C没有任何“全局名称空间”作为标准显示的片段。而\u c
在这里的功能/块范围内。对于C++,它是类似的,只是更一般的措辞。@奥拉夫-我已经清楚地分开了这两个引文,并明确地标记了无效的术语。所以我真的不知道你指的是什么问题