C/C++ :快来看看使用头文件过程中可能会遇见的大坑和千字避坑指南!
主要的问题呢重定义:multiply defined重定义。
下面呢我就阐述几个头文件编写中常常会出现的几个坑!
#define __2_H__
extern int a; #endif //

这时候我们编译这个工程是并不会报错的。
#include "2.h"
void Change1A()
{
a = 15;
}
并且其各个文件也可以调用这个a,这个a在其头文件和各文件中是通用的。
可以看到,输出的结果分别是0,30,15.可以表示这里的a是通用的被连接到了一起。
但是使用这个方法也需要注意,可以有很多个extern修饰的变量,但是实际非extern修饰的变量的只能有一个。
但是但是,这里其实也可以调用在某个.c文件中定义一个static修饰的变量。实际上发现static修饰的变量和头文件的变量会冲突,这个的冲突不是编译冲突!
按理来说,我调用的a是extern的a,然后Change1A这个函数改变的a,经过测试之后发现是static修饰的a,也许是就近原则(可能),这样子导致我调用Change1A的时候,main中定义的a的并没有发生变化。
这可以证明在.c文件中,先使用的是static修饰的变量。
总结
其实无论是什么方法,我们都应该避免头文件被重复定义,同名变量不应该出现在代码中,优秀的代码编辑习惯可以极大的提高我们的工作效率和容错率。这无论是给其他人阅读代码还是我们自己阅读我们的代码都带来了便利。
无论是extern和static,最好的方法还是遵守编程规范,少数的巧妙运用但是不能靠这种方式来填坑Bug。


登录 或 注册 后才可以进行评论哦!
还没有评论,抢个沙发!