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

IAR和Keil中void *指针编译问题

[复制链接]
lvpeng-1619958 提问时间:2018-7-25 17:21 /
悬赏1ST金币未解决
本帖最后由 lvpeng-1619958 于 2018-7-26 11:16 编辑

void *p;

int FuncInt(int x,int y)

{

  return 1;

}



int main(void)

{       

   p = FuncInt;

}



上面这段代码在Keil里面没有错误和警告,

在IAR里面会提示错误:Error[Pe513]: a value of type "int (*)(int, int)" cannot be assigned to an entity of type "void *"

收藏 1 评论8 发布时间:2018-7-25 17:21

举报

8个回答
子曰好人 回答时间:2018-7-26 09:08:52
所以,问题是什么?
xiaolingoei 回答时间:2018-7-26 10:38:16
使用void * 相比于void 能提高代码的运行速度,我看的一本C语言教材里面提到了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

黑皮男 回答时间:2018-7-26 11:54:52
p = (void *)FuncInt;

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

MrJiu 回答时间:2018-7-26 13:38:18
楼上得使用强制转换也可以,但是这个问题还是怎么说呢,C语法是一个严格定义得语法,keil这个bitch,有时候会不按照C语法规则来搞事情,IAR就比较好。。。所以从规则上来说,IAR提示错误肯定是正确得,但是keil这么做,是有问题得,检查得不够严格。。。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

lvpeng-1619958 回答时间:2018-7-26 15:26:29
MrJiu 发表于 2018-7-26 13:38
楼上得使用强制转换也可以,但是这个问题还是怎么说呢,C语法是一个严格定义得语法,keil这个bitch,有时候 ...

但是如下编译没有问题
void *p;
int* q;

p = q;// 整型指针类型直接赋值给空指针是没有问题的
MrJiu 回答时间:2018-7-26 16:19:35
lvpeng-1619958 发表于 2018-7-26 15:26
但是如下编译没有问题
void *p;
int* q;

怎么说呢,void定义得类型是任何都可以赋值,而且这个是数据类型,函数调用得时候涉及到参数,返回值,不管是从代码检测或则习惯上来说,函数调用得时候严格检测比较好,至于数据类型得变量,使用得时候,好像是需要强制转换得(也即是需要明确数据类型)!!!最后做个总结,其实我是不太推荐用void,因为不管是代码质量还是习惯,C语言本身就是一个非常严谨得语法。。。当然了,也不能因噎废食,比如在局部某些地方使用得时候,可以到达很好得效果还是推荐使用的!!!

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

damiaa 回答时间:2018-7-27 14:03:55
p 没定义成void *

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

stm1024 回答时间:2018-7-27 14:08:37
所以你到底想做什么?这个函数返回的是一个int类型,所以你要么强制类型转换,或者直接把p定义为int*

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

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