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

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

[复制链接]
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扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版