extern的总结

来源:互联网 发布:周口软件开发 编辑:程序博客网 时间:2024/04/29 08:57

在刚接触的项目中,同事对extern的使用错误导致我冤枉花了近4个小时去发现错误,痛心啊,

总结下extern的使用吧:

 

    extern用在变量和函数在别的文件中需要调用时

 

1:变量

 

在一个源文件里定义了一个数组: char a[6];

 

在另外一个文件里用下列语句进行了声明:  extern char *a;

 

请问,这样可以吗?

答案与分析:   不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern char a[ ]。

 

2: 函数

 

       1: 在函数对应的头文件中extern外部要用到的函数,外部调用头文件就OK,但尽量避免这样,因为头文件包

含了太多东西

      2: 如果函数func定义在a.c里面,在b.c里面incude "a.c" 就可以调用

      3: 对1 所作分析怀疑,经过测试发现(环境redhat 9.0),函数都编译的话好像可以直接使用另一个文件的函数,除非它static了,是链接的时候调用的吗?

 

对观点1的总结            : extern的使用地方,觉得在头文件中extern和在需要用到的文件中extern相比,后者更人性,前者更简洁
对观点 2 和 3 的总结  : 如果链接的时间不一样,可能就不奏效了


 

 

原创粉丝点击