目录
如何让程序的多个 .cpp 文件之间共享全局变量(可能是 int、结构体、数组、指针、类对象)?
防止头文件重复包含
为什么要防止头问件重复包含?
当然一般也不会把变量定义放到头问件,那为什么还需要防止重复包含?
头文件的作用
头文件的主要作用与说明
C++ 函数,函数分文件编写_c++构造函数不同文件-CSDN博客
C++类和对象--封装,类分文件编写_实现一个类如何设置头文件封装-CSDN博客
杂记 define,typedef,static,extern,memset,ifndef,递归,逻辑与&&,整型提升,算术转换,栈区,高地址_ifndef &&-CSDN博客
作用分类 | 说明 | 例子 |
---|---|---|
1. 函数/类声明 | 提供函数原型或类接口,让其他 .c/.cpp 文件知道如何使用它们 |
int add(int, int); class Person { void say(); }; |
2. 类型定义 | 定义结构体(struct )、枚举(enum )、typedef 、using 等类型 |
typedef unsigned int uint; struct Point { int x, y; }; |
3. 变量声明 | 使用 extern 声明全局变量,使多个源文件共享该变量 |
extern int g_count; |
4. 宏定义 | 定义常量或代码片段,提高代码可读性与维护性 | #define PI 3.14159 #define MAX(a,b) ((a)>(b)?(a):(b)) |
5. 模板定义 | 模板函数或类定义通常必须放在头文件中 | template<typename T> T max(T a, T b) { return a > b ? a : b; } |
6. 内联函数 | 提高性能,允许编译器将函数体展开到调用处 | inline int square(int x) { return x * x; } |
7. 命名空间声明 | 定义逻辑作用域,避免命名冲突 | namespace math { int add(int, int); } |
8. 提高复用性 | 多个源文件共享接口,避免重复编写声明 | #include "utils.h" 让多个文件重用工具函数接口 |
9. 分离接口与实现 | 将接口和实现分离,提高模块化与可维护性 | .h 里写声明,.cpp 里写实现 |
10. 条件编译保护 | 防止头文件被重复包含引起重复定义错误 | #ifndef HEADER_H ... #define HEADER_H ... #endif |
第3条不好。一般不这样用
extern
声明全局变量虽然合法并常见,但确实存在一些“坏味道”,在现代 C++ 开发中不推荐广泛使用它。
如何让程序的多个 .cpp
文件之间共享全局变量(可能是 int
、结构体、数组、指针、类对象)?
或者
static
局部变量:
只在第一次进入函数时执行初始化
之后不再初始化,而是保留之前的值