OpenEdv-开源电子网

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

KEIL中微库的问题

[复制链接]

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
发表于 2016-4-26 15:49:57 | 显示全部楼层 |阅读模式
使用KEIL编写STM32代码时经常使用到微型C库里面的函数,比如调用stdio.h里面的A函数,如果我不想使用stdio.h中已经定义好的A函数。在自己的工程里重新定义了一个A函数,那么在实际的调用过程中调用的是stdio.h中原来已定义好的那个A函数还是我自己定义的A函数?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1765
金钱
1765
注册时间
2015-6-11
在线时间
312 小时
发表于 2016-4-27 16:13:21 | 显示全部楼层
qingyu111 发表于 2016-4-27 14:20
那在printf函数重定向的时候,重新定义了fputc(),我们在调用printf函数打印信息时,printf函数难道调 ...

C库中实现的是printf函数,不是fputc,fputc是printf调用的硬件接口函数,你可以自己去网上看下printf的实现就明白了,C库只有fputc的声明,怎么会冲突?
回复 支持 1 反对 0

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-4-26 23:35:24 | 显示全部楼层

回帖奖励 +5 金钱

名字相同会冲突,名字不同,调用哪个就是哪个
回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-4-27 14:20:00 | 显示全部楼层
八度空间 发表于 2016-4-26 23:35
名字相同会冲突,名字不同,调用哪个就是哪个

那在printf函数重定向的时候,重新定义了fputc(),我们在调用printf函数打印信息时,printf函数难道调用的不是我们重定义的fputc()?按照你的说法,重定义的fputc()和C库中的fputc()不就冲突了吗?
回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-4-28 09:19:33 | 显示全部楼层
zc123 发表于 2016-4-27 16:13
C库中实现的是printf函数,不是fputc,fputc是printf调用的硬件接口函数,你可以自己去网上看下printf的 ...

原来是这样啊,我以为fputc在c库中已经定义过了呢。谢谢!那我如果在自己的工程中重新定义printf函数,就会和C库中的printf冲突吗?冲突的后果会是什么?再问高手一个问题,通过什么方法能够知道哪些函数是在c库中定义了哪些只是在c库中声明了一下?非常感谢
回复 支持 反对

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1765
金钱
1765
注册时间
2015-6-11
在线时间
312 小时
发表于 2016-4-28 16:45:24 | 显示全部楼层
qingyu111 发表于 2016-4-28 09:19
原来是这样啊,我以为fputc在c库中已经定义过了呢。谢谢!那我如果在自己的工程中重新定义printf函数,就 ...

如果自己定义printf会冲突的,你用keil自己定义,就会发现报错的。
一般来说都是标准C的,你去看C Primer Plus(第五版)中文版,里面会讲常用的C库函数。
还有不用担心冲突,冲突IDE会报错的,很容易发现!
回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-4-28 17:52:28 | 显示全部楼层
zc123 发表于 2016-4-28 16:45
如果自己定义printf会冲突的,你用keil自己定义,就会发现报错的。
一般来说都是标准C的,你去看C Prime ...

谢谢,根据你的指导,我要买一本C Primer Plus(第五版)好好研究下,不过目前还有一点不太明白,我认为“标准C库中应该有fputc函数的定义,只不过在Keil的微库中只是声明了一下fputc函数,具体的实现部分留给了用户自己,方便类似printf函数的重定向”,可以这样理解吗??太麻烦你了
回复 支持 反对

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1765
金钱
1765
注册时间
2015-6-11
在线时间
312 小时
发表于 2016-4-29 10:29:06 | 显示全部楼层
qingyu111 发表于 2016-4-28 17:52
谢谢,根据你的指导,我要买一本C Primer Plus(第五版)好好研究下,不过目前还有一点不太明白,我认为“ ...

这样理解是对的,基础东西还是多看看才能熟悉!
回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-4-29 13:12:22 | 显示全部楼层
zc123 发表于 2016-4-29 10:29
这样理解是对的,基础东西还是多看看才能熟悉!

恩,多谢指点,好好向您学习
回复 支持 反对

使用道具 举报

10

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-1-26
在线时间
58 小时
发表于 2016-10-21 10:41:37 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 06:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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