關於#ifdef #ifndef


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文件里面,如果有定義變量之類的,就會報重定義的錯誤。

所以這種寫法的作用有:防止重復定義!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM