这里的类型都是指针啊怎么会出现warning: assignment makes pointer from integer without a cast

g3110 2010-09-14 09:04:51

#define UTMPNULL (struct utmp *)NULL

struct utmp *utmpNext()
{
struct utmp *next;

if(curRec == numRec && utmpReload() == 0)
return UTMPNULL;
next = (struct utmp *)utmpBuf;
curRec++;

return next;
}

while((buf = utmpNext()) != UTMPNULL) //warning: assignment makes pointer from integer without a cast

...全文
185 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluejays 2010-09-14
  • 打赏
  • 举报
回复
比如,即使不包含stdio.h,也可以用printf,最多是警告不会有错误。
bluejays 2010-09-14
  • 打赏
  • 举报
回复
c++要求调用函数之前必须声明。
c里面就不一样,如果调用函数之前没有声明,不会出现错误,只有警告,然后默认声明返回int。
如果连函数定义都没有,就会出现编译错误。
g3110 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bluejays 的回复:]

如果用gcc -Wall来编译,应该有警告的。
如果在调用utmpNext函数之前没有他的定义或声明,编译器会默认的把它当成返回int
[/Quote]
谢谢了。我照你说的去加了下这个函数的声明。。。警告就没有了。。
不过有个地方还是不明白, 就是没有所调用的函数的声明的话,不是应该出现编译错误::说这个函数没有定义吗??
bluejays 2010-09-14
  • 打赏
  • 举报
回复
如果用gcc -Wall来编译,应该有警告的。
如果在调用utmpNext函数之前没有他的定义或声明,编译器会默认的把它当成返回int
g3110 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bluejays 的回复:]

没看到buf的定义,应该也是指针吧 struct utmp *
可能是代码顺序的关系,比如:在while这一行所在的函数之前,没有utmpNext函数的定义也没有声明
[/Quote]
如果没有utmpNext函数的定义声明的话。。编译器应该会提示啊。。怎么反而是这个警告??
bluejays 2010-09-14
  • 打赏
  • 举报
回复
没看到buf的定义,应该也是指针吧 struct utmp *
可能是代码顺序的关系,比如:在while这一行所在的函数之前,没有utmpNext函数的定义也没有声明

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧