有些头文件重复包含,会引起错误,比如在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是C规范允许的)
如果头文件被循环包含的话,那就看你的编译器了
有的会智能处理,和只include一次一样
有的会报错
有的干脆死锁,导致编译程序崩溃(这个 只有很低级的编译器才会出 现在几乎看不到了)
不管怎样,用ifnde xxx #define xxx或者其他方式避免头文件重复包含,只有好处 没有坏处
是一个很好的习惯
这不是重复包含的问题。发生冲突的是变量。头文件里提供变量的声明就行,定义放在cpp文件里。比如int stuNum = 0
你把这句写在main.cpp里,然后在main.h里加上extern int stuNum;
带上初始化的只能是定义,所以引用了两次头文件之后,就产生了两个定义,就会导致符号冲突。
#ifdef XX。。。。
#endif
的意思是如果定义了XX那么执行中间的部分,如果把#ifdef换成#ifndef就是如果没定义XX,那么执行中间的部分。
至于用处,一方面可以防止头文件被重复包含;另一方面在调试程序时可以用到。比如在开头
#define test
然后在代码中插入调试语句时
#ifdef test
。。。
#endif
这样在调试结束可以把去除test的定义,这样调试语句就不起作用了,而不用删除代码或者加注释
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)