c++ ifdef,extern让多个文件共用同一个变量
首先明确ifdef和#define作用范围
看这位博主可以知道最重要的几点:
- cpp文件中的代码#include 某个.h文件相当于是.h文件复制到该.cpp文件中,且不同的.cpp文件引用同一个带ifndef的头文件时,不会冲突,即都会执行.
- 头文件ifdef只对某个.cpp有作用,对多个.cpp无用,因为每个.cpp是单独的,#define的作用域只是单个.cpp,而不是全局所有的.cpp.
- cpp中类型定义(class C)可以重复(但一个.cpp内不行,这就是头文件卫士的作用
- 同一编译单元内,类重复定义,会编译时报错,因为编译器不知道在该编译单元.但是在不同编译单元内,类可以重复定义,因为类的定义未产生实际代码。
直接看extern实现解决多个文件共用同一个变量
common.h common.cpp command_camera.cpp
总结
- ifndef #define #endif这三个组合只能防止同一个cpp不断调用而不报错,对于多个文件就会失效,需要用到extern.
- 多个文件共用同一个头文件,那么头文件允许你类声明并定义,类中成员函数和成员变量可以写在里面而不会重定义.如果是头文件里面定义变量那么就会由于多个文件重复定义而报错.
- 所以为了解决多个头文件共用同一个头文件需要加extern,定义变量的cpp里面要extern,另一个头文件也需要用到extern.当然你也可以直接写在cpp里,只是这样就没意思了,不方便管理.
- C++里不建议你在头文件里定义变量的,所以大家还是能移则移到cpp吧,然后用extern来支持多个文件访问.
|