3 ='c'在C和C ++中有效吗?

这个问题在这里已经有了答案:

  • 有关在C ++标识符中使用下划线的规则是什么? 5个答案
  • C中的标识符中的任何位置都可以使用下划线吗? 4个答案

  • 所有变量名称必须以字母或下划线开头。 所以是的,它是有效的,除非你把它放在文件范围内。 (尽管如此,请谨慎使用双下划线,它仅供编译器内部使用)

    然而,我不会推荐具有这种名称的变量,因为它可能会让读者感到困惑。

    从C ++ 2003标准:

    17.4.3.1.2全局名称[lib.global.names]

    某些名称和功能签名集始终保留给实施:

  • 每个包含双下划线(_ _)的名称或以下划线开头且后面跟着大写字母(2.11)的名称保留给实施用于任何用途。
  • 每个以下划线开头的名称都保留给实现,以用作全局名称空间中的名称
  • 这些名字也保留在namespace :: std(17.4.3.1)中。


    它在全球范围以外的任何范围内都有效1。

    C ++ 17 - n4659 / [lex.name]

    另外,一些标识符被保留供C ++实现使用,不得以其他方式使用; 不需要诊断。

  • 以下划线开头的每个标识符都保留给实现,以用作全局名称空间中的名称
  • 标准库实际上在名称空间范围内有一个例子,它继承自booststd::bind的占位符。

    和C有类似的措辞:

    C11 - n1570 / 7.1.3保留标识符

    每个头部声明或定义在其相关子条款中列出的所有标识符,并且可选地声明或定义其关联的未来库方向子条款中列出的标识符以及总是保留用于任何用途或用作文件范围标识符的标识符。

  • 所有以下划线开头的标识符总是保留用作普通标签和标签名称空间中具有文件范围的标识符。
  • 尽管选择范围更加有限。


    1 - 不是一个规范术语,只是两个标准使用的术语的混杂。

    链接地址: http://www.djcxy.com/p/40317.html

    上一篇: 3 = 'c'` valid in C and C++?

    下一篇: Class members prefixed with underscore (