野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13749|回复: 4

头文件定义问题

[复制链接]
发表于 2016-8-13 11:18:54 | 显示全部楼层 |阅读模式
三张图分别是main.c、stm32f10x.h、和stm32f10x_gpio.h。这么编译则会报错说有函数重复定义,火哥说两种解决方法。
1:把主函数中“stm32f10x.h屏蔽掉”,这方法容易理解。
2:在"stm32f10x.h"也加这么几句:
#ifndef _STM32F10X_H
#define _STM32F10X_H
.....       
#endif


那么问题来了,主函数中有这么两句
#include "stm32f10x.h"       
#include "stm32f10x_gpio.h"

执行第一句时,没有对“stm32f10x.h”进行define,则define  “stm32f10x.h”  这个文件,此时该文件里的函数进行了定义
执行第二句时,也没有对“stm32f10x_gpio.h”进行define,则define  “stm32f10x_gpio.h”这个文件,但该文件里包含了“stm32f10x.h”,
不是也对“stm32f10x.h”文件中函数进行了二次重复定义嘛???求解!!!



QQ图片20160813110415.png
QQ图片20160813110458.png
QQ图片20160813110520.png
回复

使用道具 举报

发表于 2016-8-13 11:59:30 | 显示全部楼层
“stm32f10x_gpio.h”这个文件,但该文件里包含了“stm32f10x.h”,

#include "stm32f10x.h",那么这个时候  _STM32F10X_H这个宏已经被定义了,所以:

#ifndef _STM32F10X_H

#endif

之间的所有内容都不会执行,就不存在重复定义的问题了
回复 支持 反对

使用道具 举报

发表于 2016-8-13 13:58:36 | 显示全部楼层
第一次遇到,定义宏,且执行#if里的语句,第二次遇到,由于已经定义,把以不执行if里的语句
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-13 14:29:58 | 显示全部楼层
flyleaf 发表于 2016-8-13 11:59
“stm32f10x_gpio.h”这个文件,但该文件里包含了“stm32f10x.h”,

#include "stm32f10x.h",那么这个 ...

哦哦,我懂啦,谢谢啦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-13 14:30:21 | 显示全部楼层
贡慧丽 发表于 2016-8-13 13:58
第一次遇到,定义宏,且执行#if里的语句,第二次遇到,由于已经定义,把以不执行if里的语句

懂啦懂啦,谢谢啦!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-12 12:10 , Processed in 0.054674 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表