漫谈:C语言 C++ 声明和定义的区别是什么
初级代码游戏的专栏介绍与文章目录-CSDN博客
我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。
C语言麻拐得很。
“声明”的意思是“有这个东西,但不一定在哪儿”。
“定义”的意思是“创建这个东西”。“定义”当然同时也是“声明”。
声明可以有多个,但不可以不一致。定义只能有一个。
一个变量或一个函数,什么时候是定义、什么时候是声明,是很复杂的。
原则上,头文件里面应该只有声明而没有定义。
int a;
这是一个定义(同时也是一个声明)。
如果这是在头文件里,而这个头文件被包含了两次,那么就是定义了两次,编译无法通过。所以一般变量不建议在头文件里面定义。
extern int a;
这是一个声明,变量在那哪里定义不知道。同样的声明可以有多个,所以头文件可以随意包含而不担心冲突。
int a();
这是一个声明,因为没有函数体,不可能实际生成这个函数。任何函数被调用前编译器都要知道函数的声明,不然不知道怎么传参数。
int a()
{return 0;
}
这是一个定义,会实际生成函数的代码供其它地方调用。因为定义只能出现一次,所以函数体一般也写在源文件里(而不是头文件里)。
类和全局变量、全局函数不一样,类里面的所有成员变量都是声明,成员函数则是可以是定义也可以是声明,类的静态变量在类外面定义,成员函数也可以定义在外面。类的成员函数如果定义在里面,每个源文件都会包含一份实现代码(当然编译器可以优化掉重复的)。类的非静态变量是在定义类的实例的时候生成的。
(这里是结束)