重复定义的问题

前段时间调试一个程序的时候总是提示某个变量重复定义,通过查阅相关的资料,问题终于解决

 

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函数中定义

你可能感兴趣的:(重复定义的问题)