complex.h 文件内容
#ifndef COMPLEX_H
#define COMPLEX_H
// 定义复数结构体
typedef struct {
double real;
double imag;
} Complex;
// 复数加法函数声明
Complex addComplex(Complex c1, Complex c2);
// 全局变量声明
extern int flag;
#endif
main.c 文件内容
#include <stdio.h>
#include "complex.h"
// 定义全局变量,必须在某个源文件中定义一次
int flag = 0;
// 复数加法函数定义
Complex addComplex(Complex c1, Complex c2) {
Complex result;
result.real = c1.real + c2.real;
result.imag = c1.imag + c2.imag;
return result;
}
int main() {
Complex c1 = {1.0, 2.0};
Complex c2 = {3.0, 4.0};
Complex sum = addComplex(c1, c2);
printf("Sum: %.2f + %.2fi\n", sum.real, sum.imag);
// 访问全局变量 flag
printf("Flag value: %d\n", flag);
return 0;
}
全局变量 flag
的访问规则
- 在
complex.h
中使用 extern
关键字声明了 flag
,这意味着它是在其他地方定义的全局变量。
- 在
main.c
中,需要对 flag
进行定义(int flag = 0;
),这样编译器才能为它分配内存空间。
- 任何包含
complex.h
的源文件都可以访问这个全局变量,但只能有一个源文件对其进行定义。
避免头文件重复包含的问题
- 使用
#ifndef
、#define
和 #endif
宏:在 complex.h
文件开头使用 #ifndef COMPLEX_H
、#define COMPLEX_H
和文件结尾使用 #endif
,这样当同一个头文件被多次包含时,预处理器会忽略重复部分。
#pragma once
:部分编译器支持 #pragma once
,在 complex.h
文件开头添加 #pragma once
也可以达到防止头文件重复包含的目的。但它不是标准 C 特性,兼容性可能不如 #ifndef
方式。