声明就是通告一声:嘿,存在这么个玩意;定义则是告诉编译器这玩意具体长什么样;参考如下代码: void a();//告诉编译器,存在一个叫做a的函数 void b()//这里b的写法,就是把声明和定义合在一起了 { a();//虽然不知道a到底是啥,但反正它声明过了,知道确实存在这么个函数,那就继续编译下去吧 } void a()//既然声明了总归要定义的,给编译器的承诺不能落空啊 { puts("A"); } 或者考虑这样的情况,有两个文件a.cpp和b.cpp,它俩要分别编译后最终链接在一起: //b.cpp extern int i;//告诉编译器一声,有个整数i存在 void a();//告诉编译器一声,有个函数a存在 void b() { a();//既然已经告诉过我a存在了,那就继续编译下去吧 i++;//既然已经告诉过我i存在了,那就继续编译下去吧 } //a.cpp int i;//补全i的定义,否则在最后链接时,i被声明却不定义,链接器将报错 void a(){}//补全a的定义
声明就是通告一声:嘿,存在这么个玩意;
定义则是告诉编译器这玩意具体长什么样;
参考如下代码:
或者考虑这样的情况,有两个文件
a.cpp
和b.cpp
,它俩要分别编译后最终链接在一起: