下面是来至网络上比较详尽的解答

先回答你的问题。
1 是可以写成 LED.H只不过你接下来要写一句#defined LED.H
因为#ifndef 后面的字符串 不管是 LED.H还是__LED_H和头文件的名字没有半毛钱关系。只不过是为了读程序的时候方便而已。其实那个字符串只要合法的就行了。
2 用法
#ifndef 字符串
#define 上述字符串
#endif
一般放在头文件里面,作用就是以防你在.c文件里面不小心重复包含头文件的时候不会报错。
例如,现在你有 main.c LED.H 两个文件。
如果你在main函数里面两次包含头文件LED.H。即
#include “LED.h”
#include “LED.h”
int main(void)
{
return 0;
}
那么你的程序肯定会报错。因为你的头文件重复添加了。
但是如果你在LED.H里面动一点手脚就把问题解决了,在LED.H添加如下代码
#ifndef abcdefg
#define abcdefg
#include "stm32f10x.h"
void led_init(void);
...//其他函数声明
#endif
就可以把问题解决。
分析如下:#ifndef 的是if no define----”如果没有定义“的意思。带#的是预编译命令,在编译之前执行。
如果没有定义abcdefg 那么就#define abcdefg 定义了abcdefg
当你多次包含LED.H这个头文件的时候。第一次肯定是没有定义的,所以肯定会执行
#define abcdefg 但是第二次,第三次,..以后再包含的时候,由于第一次已经定义过了abcdefg字符串,所以第二次的#ifndef abcdefg 不成立,所以往下的语句就不会执行。那么就不会重复包含头文件了。也不会把头文件里面声明过的函数再继续重复声明了。也就不会报错了。所以记住一点:#ifndef 在头文件里的用法是通过判断这个字符串是否被定义过,从而决定是否跳过某些语句来达到,条件编译,防止报错的效果的。当然条件编译的用处很灵活看你怎么用。给楼主总结一下3种条件编译
第一种:
#if 表达式
程序段1
#endif第二种:
#ifndef 表达式
程序段2
#endif第三种
#ifdefine 表达式
程序段3
#endif以上是三种基本的条件编译,当然可以嵌套。还可以加#elsedefine 不过elsedefine的宏命令简写我忘记是什么了,哈哈。所以就不贴上了。反正用法和if-else 一样,都是通过判断表达式是否为真,来决定往下的程序段是否被编译。

stm32中#ifndef __LED_H的作用相关推荐

  1. STM32中NVIC_SystemReset()函数的作用?什么时候用?

    STM32中NVIC_SystemReset()函数的作用?什么时候用? STM32软件复位有两种方式 (1)方式一:NVIC_SystemReset()函数用来复位STM32. 注意1:从SYSRE ...

  2. stm32 中bootloader、startup_stm32f10x_md.s的作用

     stm32 中bootloader.startup_stm32f10x_md.s的作用 转载 2016-09-12 10:47:39 一.启动文件的作用是: 1.  初始化堆栈指针 SP; 2. ...

  3. 每日一题(12)—— .h头文件中ifndef/define/endif的作用

     .h头文件中ifndef/define/endif的作用? 分析: 防止头文件被重复包含. #ifndef _TEST_H_ #define _TEST_H_/* test.h */#endif / ...

  4. STM32中C语言知识点:初学者必看,老鸟复习(长文总结)

    说在前面的话 一位初学单片机的小伙伴让我推荐C语言书籍,因为C语言基础比较差,想把C语言重新学一遍,再去学单片机,我以前刚学单片机的时候也有这样子的想法. 其实C语言是可以边学单片机边学的,学单片机的 ...

  5. 详解STM32中的ADC

    ADC简介 STM32F103系列有3个ADC,精度为12位,每个ADC最多有16个外部通道.其中ADC1和ADC2都有16个外部通道,ADC3一般有8个外部通道,各通道的A/D转换可以单次.连续.扫 ...

  6. 深入浅出地理解STM32中的定时器工作原理

    深入浅出地理解STM32中的定时器工作原理 一.如何实现延时 1 纯硬件电路 2 纯软件编程 3 可编程定时/计数器 二.可编程定时/计数器有哪些功能? 三.STM32F103 的定时器有哪些 1 基 ...

  7. 关于STM32中SPI1引脚PB3和PB4无法拉低的问题及相关解释

    关于STM32中SPI1引脚PB3和PB4无法拉低的问题及相关解释 近几点准备使用SPI1调试M25P80 发现需要用到引脚 PB3----SPI1_SCK PB4----SPI1_MISO PB5- ...

  8. STM32中的独立看门狗和窗口看门狗

    STM32中的独立看门狗和窗口看门狗 在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况.为了避免这种情况的出现,后期的MCU都集成了看门狗的功能.但是,目前看门狗发展到今天 ...

  9. Arduino处理STM32中的多个串口通讯问题

    简 介: 对于在Arduino下开发STM32的程序,对于STM32所具有的三个硬件USART进行测测试.结果显示可以使用这些串口完成相应的数据的输入与输出.但是涉及到以下两个问题,还没有得到解决:问 ...

最新文章

  1. 工资倒挂也刺激不了已是咸鱼的你
  2. centos设置java环境变量,CentOS设置环境变量
  3. 一脸懵逼学习基于CentOs的Hadoop集群安装与配置(三台机器跑集群)
  4. 一篇文章详解大数据技术和应用场景
  5. c#程序片段,替换所有同名文件
  6. java面试题,各大企业常见的java笔试题及答案(精华)
  7. 动词变名词的变化规则_高中英语动词变名词的变化规则
  8. 相对湿度与绝对湿度_如何监视家里的湿度水平
  9. 阿里云Docker仓库
  10. ANX6585D VSP/VSN 正负压输出,适用于TFT-LCD小屏应用,兼容FP7721、NT50198。
  11. python中xml Excel解析编码小结
  12. 已解决:win11无法连接网络共享打印机的方法
  13. project2010根据法定节假日更改工作时间
  14. 苹果手机数据线充不了电_平板充电柜为什么充不了电,别急可能是以下原因!...
  15. 土地经济学笔记第一部分
  16. STM32单片机初学6-SPI通信驱动IPS彩屏
  17. eai java_关于EAI,ETL与EII
  18. 2017.5.27测试 3. 逃避系统警察
  19. 关于全文搜索elasticsearch中matchQuery和termQuery的区别
  20. 多功能数字钟c语言单片机PPT,基于51单片机多功能数字钟的设计

热门文章

  1. HD_2092整数解
  2. hdu 2833(Floyd + dp)
  3. poj 2452(RMQ+二分)
  4. BNUOJ 4067 美丽的花环 (几何题)
  5. Git初始配置【一】
  6. 【旧文章搬运】Windows中全局钩子DLL的加载过程
  7. 设计模式在实际业务应用中的介绍之2——业务工厂
  8. Spring Boot修改内置Tomcat端口号
  9. Python3.5 报错:NameError: name 'reload' is not defined
  10. 系统安装操作优化:chapter4 多系统的安装与管理