头文件中防止重复定义的宏

在清理嵌入式ARM工程的编译警告时,遇到一个因头文件宏定义重复导致的问题。ADS发出'Waring : c2207w : inventing 'extern InitUartPos();''的警告。问题源头在于两个头文件'UART.H'和'UartPos.H'中宏定义冲突。通过修改'UART.H'中的宏定义,将#ifndef __UART_H__改为#ifndef __UART_RESERVE_H__,成功消除编译警告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       我是个有代码“洁癖”的人,不愿意与警告为伍,哪怕是只有一个,也会让我浑身上下都不舒服。在一次整改一个嵌入式ARM工程源代码的过程中,一个编译告警迷惑了我,费了我不少时间。    

 

    ADS提示:

    Waring : c2207w : inventing 'extern InitUartPos();'

    main.c line 87

 

    按理说不应该出现这种告警,因为main.c中已包含了对函数“InitUartPos()”的声明文件“UartPos.h”

 

    #include "UART.h"      //declare in main.c

    #include "UartPos.h"    //declare in main.c

 

以下是“UartPos.H”中“InitUartPos”函数的声明

 

#ifndef __UART_H__  

#define __UART_H__ 

 

#include "44b.h"

 

……

void InitUartPos(unsigned mclk, unsigned bps);

// 初始化POS串口

……

#endif

 

    看来,无论如何也不会有函数InitUartPos()未声明的错误。查了几次,都觉得这个编译器告警不可思议。后来某天,无意中打开了UART.H头文件,发现该文件内容如下:

 

      #ifndef __UART_H__

      #define __UART_H__ 

    天哪,错误居然躲藏在这里。原来是与“UartPos.H”中的宏定义重复了。赶紧将“UART.H”中的编译预定义宏:

#ifndef __UART_H__

#define __UART_H__ 

改为:

#ifndef __UART_RESERVE_H__  

#define __UART_RESERVE_H__ 

     这样,编译告警就解除了。

     有时,我们也会将熟知的原则忘记,就像偶而会忘掉自已的姓名一样。        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值