完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
例如有2个源文件,main.c和led.c,这两个文件均包含头文件led.h,这是编译出错的信息
而头文件led.h的格式为: # ifndef LED_H_ # define LED_H_ 。。。 # endif 请问为什么还会出现重复定义,这样的错误信息,当我把main.c中的# include "led.h"注释掉时,只是有警告,说没有声明函数,但是下载到板子里正常工作,和预期的一样 而这样在C语言是没有问题的 |
|
相关推荐
9个回答
|
|
|
|
|
|
delay函数是在.h文件定义的,根据你说说的改了不在.h里面定义确实编译正确了,但是为什么会这样
# ifndef这个预处理不是为了防止重复定义或者声明的吗 我试过在VC++6.0测试过了这个问题,也是在.h里面定义一个函数 2个不同的源文件里面都包含这个头文件,结果编译正常,且运行正常 难道51的C和标准C语言对于预处理不一样? |
|
|
|
不好意思,还有一个问题哦,keil编译51的,在main函数里面注释掉# include "led.h"
编译时出现警告,因为我用了led.h里面声明的函数,所以警告说我在使用该函数前没有声明它(请注意是警告) 那为什么仿真看波形时没有问题,下载入板子时也能够正常运行 麻烦原子哥了!! |
|
|
|
|
|
|
|
|
|
|
|
这个是挺乱的……原子哥
有时候多个C文件里面需要同一个头文件 我全包含了以后。。。 编译就会说multiple defined直接error 可是只在一个C中包含,却又警告我未定义 难道要我把几个C合并在一起吗…… 不知道KEIL MDK里面的C文件之间编译的时候究竟是什么关系…… |
|
|
|
你只要不重复包含就是了。
|
|
|
|
那头文件里不是有#ifndef吗……还是说KEILC编译器直接无视?
|
|
|
|
这个是比较怪,呵呵.
|
|
|
|
只有小组成员才能发言,加入小组>>
3277 浏览 9 评论
2950 浏览 16 评论
3454 浏览 1 评论
8983 浏览 16 评论
4044 浏览 18 评论
1092浏览 3评论
564浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
561浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2297浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1854浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 12:22 , Processed in 1.257898 second(s), Total 66, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号