你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于头文件里函数声明的问题。

[复制链接]
any012 提问时间:2016-5-30 13:58 /
阅读主题, 点击返回1楼
收藏 评论17 发布时间:2016-5-30 13:58
17个回答
潇潇雨歇pku 回答时间:2016-5-31 16:19:38
同学,我觉得你不要纠结这个问题了。
我本来想见识以下你说的奇观,可惜没见识到。我用的是keil 5.16a版本,不管注释不注释,都会报错。
QQ截图20160531161658.png
我不知道你是什么版本,居然会出现这样的情况。

其实不管报错不报错,最重要的是自己知道这样写代码是不严谨的,不报错不代表不出错。

评分

参与人数 1ST金币 +2 收起 理由
肖久 + 2

查看全部评分

any012 回答时间:2016-5-31 16:31:12
潇潇雨歇pku 发表于 2016-5-31 16:19
同学,我觉得你不要纠结这个问题了。
我本来想见识以下你说的奇观,可惜没见识到。我用的是keil 5.16a版本 ...

感谢.
我用的是5.14版本.
不纠结这个问题了,继续解决其他问题.
wofei1314 回答时间:2016-5-31 17:18:46
main里包含的是 crc.h,而crc.h又没写错,为啥要报错?没出错自然能编译通过!

函数本身有问题,才会报错,函数本身没问题,系统就认为没错,调用的时候你不按照事先给系统说的(原来函数定义的格式)做,系统自然不干了,这不是欺负人吗,开始告诉我这个,后来给个别的参数,不干,罢工.....

于是乎就有了你后面的结果
any012 回答时间:2016-5-31 17:37:59
wofei1314 发表于 2016-5-31 17:18
main里包含的是 crc.h,而crc.h又没写错,为啥要报错?没出错自然能编译通过!

函数本身有问题,才会报错, ...

问题出在,函数定义时参数指定的是8位指针,而调用时给的是16位指针.
强制转换后编译通过了.

好奇的是没有强制转换的时候,在main.c里加上#include "crc.h"也能通过编译.
可能是我编译器版本的问题.楼上的那位好心的朋友,编译时两种情况下都通不过.
zcl201207 回答时间:2016-5-31 23:44:57
asssdz-382474 回答时间:2016-6-2 03:10:56
小小木 回答时间:2016-6-2 09:49:24

好多人都答非所问,楼主又不是问为什么错了,楼主问的是为什么错误会莫名其妙的消失
moyanming2013 回答时间:2016-6-2 10:58:57
“非常危险的”默认类型转换,多个包含头文件可能会优先用main.c里面的(不知道你对crc.h加预编译指示了没有),而这里面仅仅是让编译器获取一个指针信息,指针的大小和类型在C中都是4字节和void*的,故后面再调用就不显示错误了。
其实error#167是一个非常负责的错误提示,早期编译器可能不会在这个上面处理的那么细致。你看即使现在处理了也很难处理完整。
12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版