定义和声明之间有什么区别?

这两个词的意思我都不明白

声明引入标识符并描述其类型,无论是类型、对象还是函数。声明是编译器接受对该标识符的引用所需的。这些是声明:

外部内部条;
外部INTG(int,int);
双f(整数,双);//函数声明可以省略extern
类别foo;//类型声明不允许使用外部程序

定义实际上实例化/实现了该标识符。这是链接器需要的,以便链接到这些实体的引用。这些是与上述声明相对应的定义:

int-bar;
intg(intlhs,intrhs){返回lhs*rhs;}
双f(inti,double d){返回i+d;}
类foo{};

定义可以用来代替声明

可以根据需要随时声明标识符。因此,以下内容在C和C++中是合法的:

双f(整数,双精度);
双f(int,double);
外部双f(int,double);//与上述两项相同
外部双f(int,double);

但是,它必须定义一次。如果您忘记定义已在某处声明和引用的内容,则链接器不知道将引用链接到什么,并且会抱怨缺少符号。如果您不止一次定义了某个符号,那么链接器就不知道要链接引用的定义中的哪个,并且不会抱怨重复的符号


P>自从辩论类中的一个类是EM>声明 vs.一个类定义在C++中不断出现(在回答和评论其他问题)时,我将粘贴一个C++标准的引用。
在3.1/2中,C++03表示:

声明是定义,除非它[…]是类名声明[…]

3.1/3给出了几个例子。其中:

[示例:[……]
结构S{inta;intb;};//定义S、S::a和S::b[…]
结构S;//声明S
-结束示例

P> >总结:C++标准考虑结构X;是声明和结构> X{; A> EM>定义(换言之, >EM >“向前声明”,误称 ,因为C++中没有其他形式的类声明)

感谢litb(Johannes Schaub)在他的一个答案中挖掘出了真实的章节

发表评论