title: 条件编译
date: 2021-11-19 16:35:33
tags: C 语言
前言
下午在学习单片机的时候,老师讲到头文件编写,用到了一个算是比较新鲜的语句。之前我学习的时候一直没有在意这个语句,今天算是小结一下。
在此之前,我想首先得明确在基础的C语言编写中何为头文件、源文件?
头文件
头文件就是用来写类的声明(包括类的成员的声明和方法的声明)、函数原型、#define常数等,但是一般很少写出具体的细节。头文件的编写一般需要按照下述代码格式来写:
#ifndef __LED_H
#define __LED_H
//void LED_Init(void);//LED初始化头文件
#endif
上述是条件编译的具体结构形式,条件编译是为啥?有啥作用?一般老师给出的解释是防止头文件重复引用。这种重复引用主要是include的来回嵌套,例如一个a.h头文件中引用了b.h,之后在a.c源文件中同时引用了#include "a.h"和#include "b,h"此时b.h就在源文件中被引用了两次。我们这样重复的包含会导致编译器工作量加大,如果在头文件中定义了全局变量就会导致重复定义。
上述代码可以解释为如果引用这个头文件的源文件不存在led.h那么接下来就#define__LED_H,引入led.h。然后就是我们头文件的代码了,如果已经有了,直接跳到#endif。我们为了命名的方便上面片段约定为__+大写字母的方式。内部函数仅仅是声明,没有写入具体的细节。
源文件
源文件主要是写实现头文件中已经声明的那些函数的具体代码。需要注意的是,开头必须#include一下头文件,以及要用到的头文件。当你在单片机里配置相应的驱动程序时候,只需要将#include进来就可以了。
下面我将在VS2019中将上述过程实现。
程序实现
这里采用的是求两个数最大值。这里我按照头文件、源文件、主程序的顺序来进行编写具体代码如下:
头文件:
#ifndef __SHIYAN_H
#define __SHIYAN_H
int max(int x,int y);
#endif
这里采用上述的规则来进行编辑,我所编写用的是VS2019软件这里int max(int x,int y)是一个声明函数,其具体配置需要在源文件中编写程序。
源文件:
#include "shiyan.h"
int max(int x, int y)
{
int z;
if (x >= y)
z = x;
else
z = y;
return (z);
}
这里是源文件的编写将"shiyan.h"给包含进来然后编写int max(int x,int y)完成对应的功能。
主程序:
#include <stdio.h>
#include "shiyan.h"
int main()
{
int a, b,c=0;
printf("请输入两个分别给a,b赋值的数:\n");
scanf("%d,%d",&a,&b);
c = max(a,b);
printf("最大值为:%d\n",c);
}
主程序如上述,只需调用max(int x,int y)就可以了,运行结果如图一所示:
图一最大函数调用运行结果
、