带有多个声明符的声明——定义

Declaration with multiple declarators - Definition?

本文关键字:声明 定义      更新时间:2023-10-16

下面的声明也是定义吗?

int f(), i = 1;

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

int f();
int i = 1;

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

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

f()只被声明。在其他地方应该有一个定义

定义了

i。后续的声明需要使用extern来避免被重定义。

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

声明是定义除非它声明了一个函数而没有指定函数体,它包含extern说明符或…

这段话继续写下去,有一些规则和例外。尽管讨论了不立即适用于整个声明的特性,但它没有在这里提到声明器,这可能是标准的一个缺陷。

我们还有§8/3,

声明中的每个init-declarator将被单独分析,就像它本身在声明中一样。

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

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

此声明

int f(), i = 1;

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

函数定义是包含函数体的函数声明。然而,在上面的声明中,函数不包括它的函数体。因此,如果它是C声明,则它只是函数f的声明,参数数量未知,如果它是c++声明,则没有参数。

对于变量i,此声明同时是变量的定义,因为为int类型的对应对象保留了内存,并且保留的内存由整型常量1初始化。

选自C标准(6.7声明)

5声明指定了集合的解释和属性的标识符。标识符的定义是对的声明标识符

—对于一个对象,为该对象保留存储空间;

—用于函数,包括函数体