当前位置: 代码迷 >> 综合 >> c++ ifdef,extern让多个文件共用同一个变量
  详细解决方案

c++ ifdef,extern让多个文件共用同一个变量

热度:30   发布时间:2023-12-12 00:01:24.0

c++ ifdef,extern让多个文件共用同一个变量

  • 首先明确ifdef和#define作用范围
  • 直接看extern实现解决多个文件共用同一个变量
  • 总结

首先明确ifdef和#define作用范围

看这位博主可以知道最重要的几点:

  1. cpp文件中的代码#include 某个.h文件相当于是.h文件复制到该.cpp文件中,且不同的.cpp文件引用同一个带ifndef的头文件时,不会冲突,即都会执行.
  2. 头文件ifdef只对某个.cpp有作用,对多个.cpp无用,因为每个.cpp是单独的,#define的作用域只是单个.cpp,而不是全局所有的.cpp.
  3. cpp中类型定义(class C)可以重复(但一个.cpp内不行,这就是头文件卫士的作用
  4. 同一编译单元内,类重复定义,会编译时报错,因为编译器不知道在该编译单元.但是在不同编译单元内,类可以重复定义,因为类的定义未产生实际代码。

直接看extern实现解决多个文件共用同一个变量

common.h
在这里插入图片描述
common.cpp
在这里插入图片描述
command_camera.cpp
在这里插入图片描述

总结

  1. ifndef #define #endif这三个组合只能防止同一个cpp不断调用而不报错,对于多个文件就会失效,需要用到extern.
  2. 多个文件共用同一个头文件,那么头文件允许你类声明并定义,类中成员函数和成员变量可以写在里面而不会重定义.如果是头文件里面定义变量那么就会由于多个文件重复定义而报错.
  3. 所以为了解决多个头文件共用同一个头文件需要加extern,定义变量的cpp里面要extern,另一个头文件也需要用到extern.当然你也可以直接写在cpp里,只是这样就没意思了,不方便管理.
  4. C++里不建议你在头文件里定义变量的,所以大家还是能移则移到cpp吧,然后用extern来支持多个文件访问.