为什么即使在调用之前未定义函数调用,函数调用仍然有效?

use*_*648 1 c forward-declaration function-declaration

我做过这个测验,并不理解输出

#include <stdio.h>
int main()
{
    void demo();
    void (*fun)();
    fun = demo;
    (*fun)();
    fun();
    return 0;
}

void demo()
{
    printf("GeeksQuiz ");
}
Run Code Online (Sandbox Code Playgroud)

预期:编译错误,因为我认为通常demo()需要在调用之前初始化main()

实际结果: GeeksQuiz GeeksQuiz

我的假设是错误的,通常需要在调用它们之前定义函数吗?

Sou*_*osh 6

函数通常需要在被调用之前定义

好吧,实际上,编译器只需要在调用(使用)之前查看原型.一个向前声明就足够了.

在你的情况下,在里面main(),

void demo();
Run Code Online (Sandbox Code Playgroud)

正在为此目的服务.请注意,这不是函数调用.