使用下面的示例,请解释为什么有时不需要返回语句?函数有一个返回类型,但缺少返回语句。同时,程序编译和工作正常。检查没有返回语句的函数的返回值
请帮助我更好地理解这种
5
6 char* handleInput() {
8 fgets(buffer, 1024, stdin);
9 **// return buffer;** <---- COMMENTED RETURN
10 }
11
12 void main() {
14 char* ptr = handleInput();
15 int flag = atoi(ptr);
16 if (flag < 0) break;
17 printf("You entered: %s\n", ptr);
20 }
是的。我也期待一个警告。 GCC对此代码很好。没有警告 – JAM
用'gcc -W -Wall -ansi -pedantic'编译,你会看到警告。 –
我敢肯定,警告是存在的。愚蠢的运气很可能是因为fgets实际上返回了缓冲区,这几乎已经在返回寄存器中了,这是Intel盒子上的RAX或EAX(他们在1985年停止使用AX)。因为这是在handleInput中执行的最后一个语句,handleInput返回并返回寄存器中的内容是什么?没错 - 缓冲!您可以查看生成的汇编语言来查看。另外@mac,你编译时是否打开了警告? –