野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13183|回复: 28

【STM32固件库C语言知识点整理】条件编译,#ifndef #define #endif 大把初学者不知道

[复制链接]
发表于 2016-8-3 14:58:41 | 显示全部楼层 |阅读模式
1、固件库里面有一个很重要的头文件,叫stm32f10x.h,这个头文件实现了外设寄存器的映射,相当于51单片机中的reg51.h

2、这个头文件会被很多文件包含调用,那就意味着stm32f10x.h的头文件会被多次包含,文件里面的那些寄存器结构体声明就会出现重复声明的错误

3、那为了防止头文件被重复包含时出现函数或者变量重复定义的情况,我们可以通过条件编译来解决

  1. #ifndef  __STM32F10X_H
  2. #define __STM32F10X_H

  3. // stm32f10x.h 头文件的真正内容

  4. #endif   /* __STM32F10X_H */
复制代码


比如,stm32f10x.h被stm32f10x_gpio.h和stm32f10x_usart.h这两个固件库的头文件包含了,那么首次编译的时候就会判断是否定义了__STM32F10X_H,那第一次肯定是没有定义的,那紧接着就定义__STM32F10X_H,


当编译到第二个头文件也包含了stm32f10x.h时,因为__STM32F10X_H 已经被定义过,stm32f10x.h的内容就不会再编译一次。

所以,不管是固件库头文件还是我们自己用户编写头文件的时候,为了养成好的习惯,都必须在头文件上加上条件编译。
回复

使用道具 举报

发表于 2016-8-3 15:01:07 | 显示全部楼层
哈哈哈哈   im here
回复 支持 反对

使用道具 举报

发表于 2016-8-3 15:02:58 | 显示全部楼层
这个火哥在视频里面有讲过
回复 支持 反对

使用道具 举报

发表于 2016-8-3 15:03:37 | 显示全部楼层
用心良苦                     ,看的群里面有人问这个问题,还专门写了个帖子来回答,这技术支持做的真的是太到家了。
回复 支持 1 反对 0

使用道具 举报

发表于 2016-8-3 15:03:56 | 显示全部楼层
又学到一招
回复 支持 反对

使用道具 举报

发表于 2016-8-3 15:04:34 | 显示全部楼层
许亮 发表于 2016-8-3 15:03
用心良苦                     ,看的群里面有人问这个问题,还专门写了个帖子来回答,这技术支持做的真的 ...

在群里面我也就随便回答了下,火哥居然发个帖子来回答
回复 支持 反对

使用道具 举报

发表于 2016-8-3 15:05:04 | 显示全部楼层
学习了,大概知道是这么用。
回复 支持 反对

使用道具 举报

发表于 2016-8-3 15:30:06 | 显示全部楼层
只是知道无脑加上就好了
回复 支持 反对

使用道具 举报

发表于 2016-8-3 16:11:10 | 显示全部楼层
望蓝天 发表于 2016-8-3 15:30
只是知道无脑加上就好了

对,先不管懂不懂,先加上先。
回复 支持 反对

使用道具 举报

发表于 2016-8-3 17:08:43 | 显示全部楼层
许亮 发表于 2016-8-3 16:11
对,先不管懂不懂,先加上先。

就喜欢粗暴,无脑
回复 支持 反对

使用道具 举报

发表于 2016-8-3 18:56:58 | 显示全部楼层
先加进去再说,学着学着就懂了,是不是这个意思火哥
回复 支持 反对

使用道具 举报

发表于 2016-8-3 18:57:37 | 显示全部楼层
许亮 发表于 2016-8-3 16:11
对,先不管懂不懂,先加上先。

意思就是学着学着就懂了呗,跟开车一样,开着开着就变成老司机了
回复 支持 反对

使用道具 举报

发表于 2016-8-3 18:57:52 | 显示全部楼层
望蓝天 发表于 2016-8-3 15:30
只是知道无脑加上就好了

我就知道你无脑,哈哈
回复 支持 反对

使用道具 举报

发表于 2016-8-3 18:58:13 | 显示全部楼层
许亮 发表于 2016-8-3 15:03
用心良苦                     ,看的群里面有人问这个问题,还专门写了个帖子来回答,这技术支持做的真的 ...

火哥精神可嘉
回复 支持 反对

使用道具 举报

发表于 2016-8-3 18:58:32 | 显示全部楼层
或者这技术支持没谁了
回复 支持 反对

使用道具 举报

发表于 2016-8-3 18:59:00 | 显示全部楼层
谢谢火哥的帖子的解答
回复 支持 反对

使用道具 举报

发表于 2016-8-3 18:59:56 | 显示全部楼层
火哥,经常出现找不到头文件,咋整
回复 支持 反对

使用道具 举报

发表于 2016-8-3 19:00:13 | 显示全部楼层
支持火哥!!!
回复

使用道具 举报

发表于 2016-8-3 19:00:35 | 显示全部楼层

你是谁?群里的?
回复 支持 反对

使用道具 举报

发表于 2016-8-3 19:01:08 | 显示全部楼层
所以,不管是固件库头文件还是我们自己用户编写头文件的时候,为了养成好的习惯,都必须在头文件上加上条件编译。这点收益了
回复 支持 反对

使用道具 举报

发表于 2016-8-3 21:22:07 | 显示全部楼层
想讲你知 发表于 2016-8-3 18:57
我就知道你无脑,哈哈

。。。这你都知道
回复 支持 反对

使用道具 举报

发表于 2016-8-4 09:14:02 | 显示全部楼层
谢谢fire哥。
回复 支持 反对

使用道具 举报

发表于 2016-8-7 17:39:47 | 显示全部楼层
前段时间在自定义头文件的时候把      ifndef                 写漏掉个n,导致出错到处找问题。废了一段时间。
回复 支持 反对

使用道具 举报

发表于 2016-8-11 22:37:31 | 显示全部楼层
__STM32F10X_H 这个是什么意思呢?为什么不是stm32f10x.h?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-11 23:26:38 来自手机 | 显示全部楼层
Alex5626 发表于 2016-8-11 22:37
__STM32F10X_H 这个是什么意思呢?为什么不是stm32f10x.h?

红定义基本用大写,而且这个宏跟你的文件名字没有半毛钱关系,之所以取的一样是为了让你好认。
回复 支持 反对

使用道具 举报

发表于 2016-10-4 11:34:01 | 显示全部楼层
赞赞赞赞
回复

使用道具 举报

发表于 2017-2-23 13:39:27 | 显示全部楼层
学习了,,,,,
回复

使用道具 举报

发表于 2018-4-14 22:26:31 | 显示全部楼层
为何文件名前有两个下画线???
回复 支持 反对

使用道具 举报

发表于 2018-4-15 08:28:35 | 显示全部楼层
支持火哥,感谢传道授业解惑的老师
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-12 17:39 , Processed in 0.054829 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表