请解释以下代码的输出

时间:2015-07-17 14:27:02

标签: c printf

有人可以解释下面代码的行为。为什么返回类型为 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 个答案:

答案 0 :(得分:2)

这是由未定义的行为引起的 这是一个similar question,我无法比second answer做得更好:

  

这只是未定义的行为;如果你没有填充返回区域[...],它将通过函数中的一些副作用设置最后设置的值。

...这是QStandardItem返回的值。

答案 1 :(得分:1)

未定义的行为 ......

由于message()中没有返回集,它会将C设置为垃圾。

答案 2 :(得分:1)

这是未定义的行为。

例如,如果使用clang编译并运行它,结果会有所不同。 gcc -O0产生字符串长度,-O2和-O3产生0。

也许printf的返回值与消息的寄存器放在同一个寄存器中。并且在返回之前消息不会重置寄存器。

相关问题