带有多个声明符的声明——定义
Declaration with multiple declarators - Definition?
下面的声明也是定义吗?
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声明指定了集合的解释和属性的标识符。标识符的定义是对的声明标识符
—对于一个对象,为该对象保留存储空间;
—用于函数,包括函数体
相关文章:
- 如何在C++中声明/定义相互依赖的模板?
- C++概念是否允许我的类在声明/定义中指定它满足某些概念?
- MSVC:无法识别的模板声明/定义(使用 Clang/GCC 编译)
- 我可以重用同一个模板来声明/定义多个东西吗(而不复制模板代码)
- C++-模板类中模板函数的单独声明/定义
- 在C 中使用继承时,请避免使用未缴纳的函数声明/定义
- C++模板能否确定所声明/定义的实例是否为常量
- 如何在程序中声明/定义一次并在两个类中使用映射列表
- LBNF,C函数声明/定义,减少冲突
- 声明/定义返回具有自动返回类型的 valarray 的函数时的隔离错误
- #用{}和声明定义混淆
- CTOR 声明/定义中接受的 const 限定符(LLVM 错误?)
- C++ 从一个源文件中声明/定义的变量从另一个源文件访问另一个源文件
- 无法识别的模板声明/定义
- 只在.cpp中声明/定义静态方法可以吗
- 声明/定义自定义类定制对象的正确方法
- typedef声明定义未命名类时链接失败
- 用visual c++实现COM对象的声明/定义和实例化
- VS 2012中的显式模板声明/定义
- 命名空间内的友元函数声明/定义