在C语言中声明和定义有什么区别?

如问题所述,我对声明和定义的概念理解的相当混乱。

阅读 3.7k
2 个回答

声明就是通告一声:嘿,存在这么个玩意;
定义则是告诉编译器这玩意具体长什么样;
参考如下代码:

void a();//告诉编译器,存在一个叫做a的函数
void b()//这里b的写法,就是把声明和定义合在一起了
{
    a();//虽然不知道a到底是啥,但反正它声明过了,知道确实存在这么个函数,那就继续编译下去吧
}
void a()//既然声明了总归要定义的,给编译器的承诺不能落空啊
{
    puts("A");
}

或者考虑这样的情况,有两个文件a.cppb.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的定义
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进