具有多个声明符的声明 - 定义?
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" 规则表述。
下面的声明也是定义吗?
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" 规则表述。