我想知道这个简单的c代码中发生了什么:
#include <stdio.h>
int something(int a, int b) {
int c = a * 3 + 4 * b;
}
int main()
{
int res = something(12, 54);
printf("%d\n", res);
return 0;
}
该功能没有返回,但“res”存储 中计算的值。
下面我展示了编译命令,执行和输出:
$ gcc main.c
$ ./a.out
252
我已经将变量类型从int更改为float,相对于@Paul Ogilvie注释,它似乎返回存储的最后一个int:
#include <stdio.h>
float something(int a, int b) {
float res = a * 3 + 4 * b * 1.0;
}
int main() {
float res = something(12, 54);
printf("%d\n", res);
return 0;
}
$ gcc main.c
$ ./a.out
54
答案 0 :(得分:3)
是undefined behavior,请参阅here:
到达任何其他值返回函数的末尾是未定义的行为,但仅当在表达式中使用函数的结果时。
使用gcc -Wreturn-type
编译代码会发出相应的警告:
ret.c:4:1: warning: control reaches end of non-void function [-Wreturn-type]