头文件包含
头文件在C语言中是非常重要的组成部分。
- 系统级头文件和自定义头文件:
是用于包含系统级头文件,这些头文件通常是C标准库或者其他系统提供的库的头文件,例如stdio.h
、string.h
、math.h
等。"xxx.h"
是用于包含自定义头文件,这些头文件通常是你自己或者团队编写的,用于组织和声明你的程序中的函数、变量、宏等。
- 预处理阶段的替换:
在预处理阶段,#include
指令会将指定的头文件内容原样替换到包含它的源文件中。这样,在编译阶段时就可以知道函数的声明,使得调用函数时不会出现未声明的情况。 - 一个完整的C代码的组织:
xxx.c
源文件包含了函数的定义和调用,实现了具体的功能。xxx.h
头文件包含了对应xxx.c
中函数的声明,起到了接口的作用,使得其他文件在调用这些函数时能够正确地使用。
- 头文件保护(Include Guards): 为了防止头文件被重复包含导致的重定义问题,通常在头文件的开头和结尾加入预处理指令,例如:
#ifndef XXX_H
#define XXX_H
// 内容
#endif // XXX_H
这样可以确保头文件只被包含一次。
- 命名规范: 通常头文件的命名使用全小写,可以包含下划线,以反映与源文件的关系。例如,如果有一个源文件
led.c
,那么对应的头文件可能是led.h
。
整体来说,头文件的正确使用有助于代码的模块化、可维护性和可读性。
单片机中led.c
#include "led.h"//私有库
#include "stdio.h"
//.c写函数的
//无参无返的函数
//函数名:LED_Config //入口地址
//LED1- >PC4 低电平点亮
//LED2- >PC5 低电平点亮
//LED3- >PC6 低电平点亮
//LED4- >PC7 低电平点亮
void LED_Config(void)
{
#if (REG_CODE)
RCC- >AHB1ENR |= 1< < 2; //GPIOC的时钟开关
GPIOC- >MODER &= ~(3< < 2*4);//把89位清00 PC4
GPIOC- >MODER |= (1< < 2*4);//只是把第89位置01
GPIOC- >MODER &= ~(3< < 2*5);//把10 11位清00 PC5
GPIOC- >MODER |= (1< < 2*5);//只是把第89位置01
GPIOC- >MODER &= ~(3< < 2*6);//把11 12位清00 PC6
GPIOC- >MODER |= (1< < 2*6);//只是把第89位置01
GPIOC- >MODER &= ~(3< < 2*7);//把89位清00 PC7
GPIOC- >MODER |= (1< < 2*7);//只是把第89位置01
GPIOC- >OTYPER &= ~(1< < 4); //推挽模式//0xFFFF FFEF
GPIOC- >OTYPER &= ~(1< < 5);
GPIOC- >OTYPER &= ~(1< < 6);
GPIOC- >OTYPER &= ~(1< < 7);
//假设输出状态 灯的开关
GPIOC- >ODR |= (1< < 4)| (1< < 5)|(1< < 6) |(1< < 7); //默认全关
printf("寄存器代码...rn");
#else
printf("LED库函数代码...rn");
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStruct.GPIO_Speed = GPIO_High_Speed;
GPIO_Init(GPIOB,&GPIO_InitStruct);
#endif
}
//开灯代码
void LED1_On(void)
{
GPIOC- >ODR &= ~(1< < 4);
}
//关灯代码
void LED1_Off(void)
{
GPIOC- >ODR |= (1< < 4);
}
//闪灯代码
void LED1_Tog(void)
{
GPIOC- >ODR ^= (1< < 4);
}
单片机中led.h
#ifndef _LED_H_
#define _LED_H_
//.h 声明函数
#include "stm32f4xx.h"//公共的库
//函数指针:指向函数的指针变量 变量被赋的值就是LED_Config
void LED_Config(void);//
void LED1_On(void);
void LED1_Off(void);
void LED1_Tog(void);
#endif
至此,头文件包含相关内容就介绍完了
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
180文章
7588浏览量
135734 -
函数
+关注
关注
3文章
4273浏览量
62288 -
C代码
+关注
关注
1文章
89浏览量
14264 -
头文件
+关注
关注
0文章
24浏览量
9835 -
源文件
+关注
关注
0文章
30浏览量
4564
发布评论请先 登录
相关推荐
你应该搞懂的 C 语言头文件路径问题
前段时间在写 Linux 专栏的过程中,忽然想到一个问题 :C语言的头文件路径,因为在GCC环境下面,可以很直观的了解到程序对头文件的查找位置,但是对于使用集成开发环境 KEIL 或者
C语言中程序员编写的头文件和编译器自带的头文件
#include 指令会指示 C 预处理器浏览指定的文件作为输入。预处理器的输出包含了已经生成的输出,被引用文件生成的输出以及 #include 指令之后的文本输出。例如,如果您
C 语言的头文件路径位置问题
前言 前段时间在写 Linux 专栏的过程中,忽然想到一个问题 :C语言的头文件路径,因为在GCC环境下面,可以很直观的了解到程序对头文件的查找位置,但是对于使用集成开发环境 KEIL
评论