前段时间调试一个程序的时候总是提示某个变量重复定义,通过查阅相关的资料,问题终于解决
1. 在头文件中不应该定义有初始化值的全局变量和只读在RO中的变量,否则容易出现重复定义的问题
比如:
头文件hello。h中 有char string[1024]; //不初始化在bss中
在文件main.c中
#include "hello.h"
int main()
{}
在文件hello.c中
#include "hello.h"
这样编译会出现重复定义的错误,因为连接时hello.c和main.c都含有hellO.H文件,这样在内存中会有两份相同的string拷贝,肯定会报重复定义的错误。
2.如果将上面的char string[1024];改成static char string[1024];由于static申明只在本文件有效。连接能够通过,但是在两个目标文件中都记录了一个未初始化的数据,运行时将分配连个1024的空间,造成了资源的浪费,所以在头文件中不要定义静态变量。
3.在头文件中对函数只做申明,对变量用extern声明,在.c函数中定义