这两个词的意思我都不明白
声明引入标识符并描述其类型,无论是类型、对象还是函数。声明是编译器接受对该标识符的引用所需的。这些是声明:
外部内部条;
外部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)在他的一个答案中挖掘出了真实的章节