☰
C语言——文件包含,条件编译,不同模块函数组成完整内容的方式
2026/9/30 5:30:33 网站建设 项目流程

文件包含

#include<文件名>//默认到系统的标准路径下寻找要包含的头文件

#includ3"文件名"//默认先到当前位置下 寻找要包含的头文件,如果找到,包含进来,如果没找到,才到系统的标准路径下寻找

说明:

1,include这个预处理命令执行后,用文件中的内容,替换这个命令所在的位置

2使用时 <> //如果是系统相关的头文件用<>

"" //如果自己写的头文件用""

条件编译

语义:

判断标识符是否定义

如果定义了——真 选择程序段1

如果没定义——假 选择程序段2

如下代码是定义后执行结果是yes

#include<stdio.h> #define N int main(void) { #ifdef N printf("yes\n"); #else printf("no\n"); #endif return 0; }

以下是与前面逻辑相反的情况(即先判断假,再判断真)

还有下面这种用于控制哪些语句运行

#if 表达式 程序段1 #else 程序段2 #endif

#if 1
printf("yes\n");
#endif
执行结果yes

#if 0
printf("yes\n");
#endif
不运行这段打印

#if 后也可以用计算表达式比如#if 1+2


文件包含

实现好的功能 某个模块独立的.c程序提供或者打包成库文件

这时候要把大量的各个模块的.c文件结合起来,一个.c对应有一个头文件

.c——实现具体功能的具体代码比如函数

.h——头文件——放的是自身需要用到的宏类型说明,函数声明//变量的定义不能放到头文件

原因:变量定义 int a=10; 会分配内存;头文件会被多次 #include 粘贴到不同.c里,就造成【同一个变量,多次分配内存】,链接时报重复定义错误

#ifndef 头文件名 // 大写,前后下划线

#define 头文件名

1,2两步过程是为了防止重复包含的问题,如果遇到

#include"stdio.h"

#include"stdio.h"

两次头文件多次包含了文件可能会报错,这个能阻止多次使用

#ifndef = if not defined,翻译:如果没有被定义

1. 第一次 #include "getDays.h"

检查: _GETDAYS_H_ 有没有被定义?

如果没有就执行 #define _GETDAYS_H_ ,把这个宏标记定义上

往下执行,把里面的函数声明加载进来

2. 第二次又 #include "getDays.h"

检查: _GETDAYS_H_ 已经定义过了

#ifndef 条件不成立,直接跳过中间全部代码

作用:防止同一个头文件被重复粘贴,避免重复声明报错,保护声明的内容只出现一次

举一个实际例子找最大值最小值

#include<stdio.h> //求最大值 int getMax(int x, int y) { if(x > y) return x; else return y; } //求最小值 int getMin(int x, int y) { if(x < y) return x; else return y; } int main(void) { int a,b; printf("请输入两个整数:"); scanf("%d%d", &a, &b); int max = getMax(a,b); int min = getMin(a,b); printf("最大值=%d,最小值=%d\n", max, min); return 0; }

以上是一个单独的.c的找最大值最小值的代码

以下是找最大值的.h文件,

#ifndef __MAX_H__ //如果先前没有定义过,就定义这个标识符,包含声明内容 #define __MAX_H__ //目的是防止后续重复使用这个头文件会重复声明 int getMax(int x,int y); //声明函数用于后续调用知道有这个函数在 #endif //结束

以下是找最大值的.c文件

#include "max.h" int getMax(int x, int y) { return x>y ? x:y; }

以下是找最小值的.h文件

#ifndef __MIN_H__ #define __MIN_H__ int getMin(int x,int y); #endif

以下是找最小值的.c文件

#include "min.h" int getMin(int x, int y) { return x<y ? x:y; }

以下是主函数

#include<stdio.h> //调用标准库 #include "max.h" //调用获取最大值函数的声明 #include "min.h" //调用获取最小值函数的声明 int main(void) { int a=12,b=7; printf("max=%d\n", getMax(a,b)); printf("min=%d\n", getMin(a,b)); return 0; }

情况1:全部写在同一个 .c 文件

两种写法二选一:

1. 函数写在main前面:编译器从上往下读,提前看到函数实现,main直接调用,不用单独写声明。
​2. 函数写在main后面:必须在main之前,写函数声明,告诉编译器这个函数的返回值、参数。

情况2:分模块,多个.c
函数的实现代码,放到另一个 .c(max.c)。
但是main.c不知道这个函数,依然需要函数声明。
方案A:直接在main.c手写一行 int getMax(int x,int y);
缺点:项目大了,几十个函数,每个文件都复制粘贴声明;一旦函数参数改了,所有地方全部手动改,极易漏改、出错。
方案B:把这一堆声明统一放进 .h头文件
所有需要调用这个模块的 .c ,只写一句 #include "max.h" 。
只要修改头文件里的声明,所有包含这个头的文件自动同步,统一管理。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询