一个非void型函数可以没有return?

WeHentai
  • 143

图片描述
如图,creatOne没有返回一个值,但是可以成功编译并运行
图片描述

编译器是code::block 16.01自带的mingw-gcc

回复
阅读 3.1k
3 个回答
pocztek
  • 2
新手上路,请多包涵

根据 K&R《C程序设计语言(第二版 · 新版)》的说法,“return语句后面可以没有任何表达式,此时函数不会向调用者返回任何值”。我做了几个测试,编译时只会出警告,“ ' return' with no value, in function returning non-void”,并不会报错。

可以把代码贴下,我在我这边测试下。

在X86架构下, 函数的返回值一般是放到$EAX中的, 在你的例子中,很可能编译器"意外"或者有意的把newst的地址放到了这个寄存器, 所以你在main中还是能得到这个返回值。
你加个-Wall在你编译的时候, 应该会有警告。你也试试用不同的optimization level,看看结果会不会变化

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏