OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5840|回复: 5

把ifndef误写为ifdef,程序运行没问题,但有一个警告 function "LED_Init" declared implicitly

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-10-13
在线时间
0 小时
发表于 2015-10-13 15:39:18 | 显示全部楼层 |阅读模式
5金钱

现象:把ifndef误写为ifdef,程序运行没问题,但有一个警告 function "LED_Init" declared implicitly(试了网上增加extern的方法没效果,但改为#ifndef后警告消失)
疑问:如果用的是#ifdef,那此条件是不是永不成立?进而led.h永不会被定义和编译,但为何程序正常运行?

菜鸟一个,在网上找答案许久未果,求助前辈,谢谢!


最佳答案

查看完整内容[请看2#楼]

#ifndef __LED_H #define __LED_H 是为了防止头文件被重复包含,在你的工程中可能有多个文件include过这个led.h头文件,在编译的时候最先include这个led.h头文件的那个文件在编译时,这个__LED_H宏肯定还没有定义,所以#ifndef就成立,然后立即执行下面的define以及随后的函数声明等。当编译其他包含这个led.h头文件的文件时,编译器会发现已经定义了__LED_H这个宏,所以ifndef就不成立,那这个头文件的内容就不会重复声 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2015-10-13 15:39:19 | 显示全部楼层
#ifndef __LED_H
#define __LED_H
是为了防止头文件被重复包含,在你的工程中可能有多个文件include过这个led.h头文件,在编译的时候最先include这个led.h头文件的那个文件在编译时,这个__LED_H宏肯定还没有定义,所以#ifndef就成立,然后立即执行下面的define以及随后的函数声明等。当编译其他包含这个led.h头文件的文件时,编译器会发现已经定义了__LED_H这个宏,所以ifndef就不成立,那这个头文件的内容就不会重复声明。

你这里写成了ifdef,结果就会导致__LED_H这个宏一直没有定义,也就一直不成立,随后的内容也不包含,也就找不到LED_Init这个函数的声明,也就出现了function "LED_Init" declared implicitly告警;

但程序能正常运行,是因为keil这个IDE知道你没有声明函数就调用了,编译器只认为是个告警(不是个错误),并理解你的意图,处理为有声明一样的结果,所以你的程序能正常运行。
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2015-10-13 16:14:40 | 显示全部楼层
led.h  
不就写的是函数定义嘛

不执行相当于在主函数里没定义,就是这种情况
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2015-10-13 16:21:13 | 显示全部楼层
这个是为了保证头文件没有被重复包含
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-10-13
在线时间
0 小时
 楼主| 发表于 2015-10-14 11:18:27 | 显示全部楼层
回复【4楼】ianhom:
---------------------------------
太感谢了,解释的相当明了!谢谢!
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2015-2-27
在线时间
2 小时
发表于 2015-10-14 18:23:11 | 显示全部楼层
回复【4楼】ianhom:
---------------------------------
涨知识了,一直不知道这个有什么用,今天终于明白了
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 03:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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