声明有返回值的函数必须return吗???

RabbitLBJ 2012-08-24 10:58:12
如果一个函数声明如下:
int funca(int i)
{
return i;
}
毫无疑问是必须显示的return返回,并带一个int类的值

但是如果函数为
int* funcb(int i)呢??
如果
int* funcb(int i)
{}
这样编译器会报错,必须要返回一个int*
然而如果这样
int* funcb(int i)
{
if(i > 0)
{
return new int(0);
}
}
编译居然可以通过了,为什么,如果我的i<0,那么我什么都没有return啊
跟踪汇编代码也没有发现这条路径上有任何的设置eax的动作,搞不懂啊
...全文
1459 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
int main不需要

其他的都需要,否则会有警告。
rydiy 2012-08-24
  • 打赏
  • 举报
回复
我的拙见,
函数声明时的返回类型指明,函数出栈后要去寄存器中取值(取出来的是return值的地址),
函数中没有return,只是没有给这个寄存器存入合法的值。
出栈后还是会去读寄存器,只是读来来的是垃圾数据。
高手莫笑。。
RabbitLBJ 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
你的3个函数编译在G++下都是可以通过的,不同的编译器有不同的检验程度。
[/Quote]

谢谢,没有试过c++,只用了VS来尝试,还以为是标准的问题呢
图灵狗 2012-08-24
  • 打赏
  • 举报
回复
你的3个函数编译在G++下都是可以通过的,不同的编译器有不同的检验程度。
RabbitLBJ 2012-08-24
  • 打赏
  • 举报
回复
那条不return的路径其实感觉和
int* funcb(int i)
{}
是一回事啊
那为什么一个是error,一个是warning??
liangxd09 2012-08-24
  • 打赏
  • 举报
回复
会有警告:不是所有路径都有返回值

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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