首页 文章

请解释以下代码的输出[重复]

提问于
浏览
-2

这个问题在这里已有答案:

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

  • 2

    这是由未定义的行为引起的 .
    这是similar question,我不能把它比second answer更好:

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

    ...这是 printf 返回的值 .

  • 1

    这是 undefined behavior ......

    由于message()中没有返回集,因此将C设置为garbage .

  • 1

    这是未定义的行为 .

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

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

相关问题