不加-Wall参数的情况或多路返回情况下,gcc默认不对未写返回语句的情况作处理。如:
int func()
{
}
int main(void)
{
printf("%d\n", func());
}
编译正常。
一般来说,如果返回值在四个字节以内,就会使用eax寄存器返回。而return语句就是将返回值写入eax。调用者到eax寄存器中取返回值。
因此,在缺失return语句时,返回值是不确定的,危险。
汇编代码如下:
(gdb) disassemble
不加-Wall参数的情况或多路返回情况下,gcc默认不对未写返回语句的情况作处理。如:
int func()
{
}
int main(void)
{
printf("%d\n", func());
}
编译正常。
一般来说,如果返回值在四个字节以内,就会使用eax寄存器返回。而return语句就是将返回值写入eax。调用者到eax寄存器中取返回值。
因此,在缺失return语句时,返回值是不确定的,危险。
汇编代码如下:
(gdb) disassemble