我很长一段时间以来的理解是,在预处理程序运行之后,C++转换单元是一系列声明(请注意,任何定义也是声明)。

许多人都对这一说法提出异议,但没有人提出反例。但是我自己发现了这个困扰我的例子:

int x;       //declaration

;            // ??? EMPTY DECLARATION?

int main()   //dec
{            //la
}            //ration

可以使用MSVC和在线comeau进行编译。我知道标准定义了一个空语句,但是我从未听说过一个空声明。因此,我看到三个选择:
  • 我的理解是正确的,并且标准定义了一个空声明
  • 我的理解是正确的,但标准未定义空声明,并且以上翻译是格式错误的
  • 我的理解不正确,即C++ TU不是声明序列

  • 请帮助我解决我的疑虑。谢谢

    最佳答案

    C++ 0x(的当前草案)在文件范围(以及 namespace 范围和允许声明的其他位置)中允许使用空声明,它只是一个分号。它是一个独立的语法实体。

    在C++ 03中,仅在需要声明的地方不允许使用单独的分号。尽管看起来简单声明可能可以简化为分号,但显式规则却不允许这样做。

    7 [dcl.dcl]/3



    简而言之,这意味着只有在不省略decl-specifier-seq的情况下,才能省略init-declarator-list。

    关于c++ - C++转换单元的语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4335024/

    10-13 07:39