【发布时间】:2015-07-17 14:27:01
【问题描述】:
有人可以解释以下代码的行为吗?返回类型为 int 的函数 message() 怎么会返回 printf() 函数打印的字符数而没有任何返回语句?
#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");
}
【问题讨论】:
-
未定义行为的(反)奇迹。
-
printf 返回字符数。它的返回值显然放在堆栈的某个地方。在某些实现中,将函数调用分配给变量的实现显然是某种指针,指向如果函数返回值,函数将返回值的位置。由于没有返回值,因此您正在执行类似悬空指针的操作。在这个实现中,它碰巧指向一个与函数所做的事情相关的值,但 C 标准中没有任何东西可以保证这种行为。