void函数指针返回C中的值

sam*_*bos 0 c function-pointers void

我正在玩C中的函数指针只是为了学习.我尝试调用void函数并将其结果设置为int.

void function(int x, int y){
printf("%d,%d\n",x,y);
}

int main(){
    int (*fptr)(int,int);
    fptr = function;
    int a = fptr(2,3);
    printf("%d\n",a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

2,3 4

稍微玩了一下之后,我意识到main是在function()中打印printf语句中的字符数.为什么会这样?这是预期的产出吗?

abe*_*nky 6

这是未定义的行为,因此,任何行为都是"规范",包括"鼻子恶魔"

但是,我们可以解释为什么在许多现代平台上可能会发生这种情况.

的最后一个函数的返回值具有一个返回值通常被放置在AX CPU的寄存器中.

printf是有一个返回值,并把最后一个函数4AX寄存器中.在此期间
没有其他任何东西过度写入AX寄存器,并且变量a获取"返回值"(即使fptr没有返回值!),通过获取AX寄存器的内容,这仍然是4.