这个问题在这里已有答案:
有人可以解释下面代码的行为 . 为什么返回类型为 int 的函数message()返回printf()函数打印的字符数而没有任何return语句?
#include <stdio.h>
int message();
int main() {
int c;
printf("C before:%d\n",c);
c=message();
printf("C after:%d\n",c);
return 0;
}
int message(){
printf("From the message");
}
3 回答
这是由未定义的行为引起的 .
这是similar question,我不能把它比second answer更好:
...这是
printf
返回的值 .这是 undefined behavior ......
由于message()中没有返回集,因此将C设置为garbage .
这是未定义的行为 .
例如,如果使用clang编译它并运行它,结果会有所不同 . gcc -O0产生字符串长度,-O2和-O3产生0 .
也许printf的返回值与消息的寄存器放在同一个寄存器中 . 并且在返回之前消息不会重置寄存器 .