关于#ifdef #ifndef

it2022-05-05  125

1、先看#ifdef的用法:

#define KEY1_PA0 #ifdef KEY1_PA0 -------------第一段----------------- #define macKEY1_GPIO_CLK RCC_APB2Periph_GPIOA #define macKEY1_GPIO_PORT GPIOA #define macKEY1_GPIO_PIN GPIO_Pin_0 #else //KEY2_PC13 -------------第二段----------------- #define macKEY1_GPIO_CLK RCC_APB2Periph_GPIOC #define macKEY1_GPIO_PORT GPIOC #define macKEY1_GPIO_PIN GPIO_Pin_13 #endif

如果定义过 KEY1_PA0,就执行第一段代码,否则就执行第二段代码!!

 

2、#ifndef的用法:

在文件bsp_usart1.h中:

#ifndef __USART1_H #define __USART1_H //statement. #endif // usart1.h

 

如果没有define过__USART1_H,就执行下面的语句;如果定义过,就不执行;

所以在一个.c文件里面,多次调用到该文件的时候,就相当于只调用一次。

这是头文件的常用写法!!

 

比如:

在文件main.c中:

#include "stm32f10x.h" #include "bsp_usart1.h"

在bsp_usart1.h中:

#include "stm32f10x.h"

在stm32f10x.h中:

#ifndef __STM32F10x_H #define __STM32F10x_H #endif

 

分析:

(1)、在main.c中调用了一次文件stm32f10x.h,调用的时候发现__STM32F10x_H并没有被define,所以就执行#ifndef - #endif之间的代码,

执行过后,就相当于define了__STM32F10x_H

(2)、当在bsp_usart1.h中再次调用文件stm32f10x.h的时候,发现__STM32F10x_H已经被define过了,所以这时就不再执行#ifndef - #endif 之间的代码了!

如果没有#ifndef的话,在这里,stm32f10x.h文件里面,如果有定义变量之类的,就会报重定义的错误。

所以这种写法的作用有:防止重复定义!!

 

转载于:https://www.cnblogs.com/agnily/p/5848768.html


最新回复(0)