zoukankan      html  css  js  c++  java
  • 关于#ifdef #ifndef

    https://www.cnblogs.com/agnily/p/5848768.html

    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文件里面,如果有定义变量之类的,就会报重定义的错误。

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

  • 相关阅读:
    android中src和background区别
    html标签大全
    android横竖屏切换时activity的生命周期
    onInterceptTouchEvent和onTouchEvent调用时序
    Android Activity单例
    Android dispatchTouchEvent
    android 2D API相关
    杭电 1085 Holding BinLaden Captive!
    杭电 1715 大菲波数
    杭电 1492 The number of divisors(约数) about Humble Numbers
  • 原文地址:https://www.cnblogs.com/focus-z/p/10260164.html
Copyright © 2011-2022 走看看