具有多个声明符的声明 - 定义?

Declaration with multiple declarators - Definition?

下面的声明也是定义吗?

int f(), i = 1;

如果我们这样重写它,只有第二个声明是一个定义:

int f();
int i = 1;

C++ 标准似乎将术语定义应用于整个声明,但对我来说它似乎应该应用于部分声明。

两者都是等价的说法。在这两种情况下,它都是函数 f() 的声明和变量 i 的声明 + 定义。

这个声明

int f(), i = 1;

包含两个声明和一个定义。也就是它声明了一个函数,它声明了同时又定义了一个对象。

函数定义是包含函数体的函数声明。但是在上面的声明中,函数不包括它的主体。所以它只是一个函数声明 f 如果它是一个 C 声明或者没有参数如果它是一个 C++ 声明..

至于变量i那么这个声明同时也是变量的定义,因为为对应的int类型的对象预留了内存,而且预留的内存由整型常量 1.

来自 C 标准(6.7 声明)

5 A declaration specifies the interpretation and attributes of a set of identifiers. A definition of an identifier is a declaration for that identifier that:

— for an object, causes storage to be reserved for that object;

— for a function, includes the function body

每个声明符被单独视为定义或仅声明其标识符。

f() 仅声明。其他地方应该有定义。

i 已定义。后续声明需要使用 extern 以避免重新定义。

§3.1 C++14 标准中的声明和定义 说,

A declaration is a definition unless it declares a function without specifying the function’s body, it contains the extern specifier or…

该段继续进行,有很多规则和例外。尽管讨论了不立即属于整个声明的功能,但它没有在此处提及声明符可能是标准中的一个缺陷。

我们还有§8/3,

Each init-declarator in a declaration is analyzed separately as if it was in a declaration by itself.

这可以解释为覆盖 §3.1/2 中的 "contagious" 规则表述。