有人可以解释下面代码的行为。为什么返回类型为 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");
}
答案 0 :(得分:2)
这是由未定义的行为引起的 这是一个similar question,我无法比second answer做得更好:
这只是未定义的行为;如果你没有填充返回区域[...],它将通过函数中的一些副作用设置最后设置的值。
...这是QStandardItem
返回的值。
答案 1 :(得分:1)
未定义的行为 ......
由于message()中没有返回集,它会将C设置为垃圾。
答案 2 :(得分:1)
这是未定义的行为。
例如,如果使用clang编译并运行它,结果会有所不同。 gcc -O0产生字符串长度,-O2和-O3产生0。
也许printf的返回值与消息的寄存器放在同一个寄存器中。并且在返回之前消息不会重置寄存器。