
新建一个demo.h(也可以为其它文件名)的头文件,在头文件中添加函数定义,如:extern void demo()
新建一个c文件,在文件中将demo.h包含进来:#include“demo.h”,在此文件中将函数的主体写上,如下:
void demo()
{
printf("Hello.")
}
经过上述步骤,即可完成在头文件中实现函数定义。
声明和定义的区别声明(declare)做的事情是,告诉编译器有这么个 符号(函数/变量) 存在,让编译器允许后面的代码使用这个符号。
定义(define) 做的事情是,为这个 符号(函数/变量) 分配内存空间/获取其地址,让编译器知道去哪里找这个符号。
2. 为什么要把声明写在头文件中?
为了方便。
这个问题比较好理解。符号的声明并不是必须写在头文件中,写在源文件中也没问题,只要写在使用这个符号之前就行。
为什么把定义写在源文件中?
定义 不能写在头文件中,写在头文件中会出问题(static定义 除外)
如果头文件中有符号(函数/变量)的定义,当这个头文件被多个源文件include时,相当于每个源文件中都定义了同一个符号(函数/变量),这样是不合法的,编译器会报错 duplicate symbol. 符号(函数/变量)可以被多次声明,但不能被多次定义,因为定义会分配内存空间 &&确定符号的地址。
需要特殊说明的是,static类型的符号(函数/变量)定义在源文件中编译器不会报错,因为static意味着符号只会在单个编译单元中可见,因此多个源文件之间不会出现 duplicate symbol 的问题。
综上,最佳实践是:将声明写在头文件中,将定义写在源文件中。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)