Почему вызов функции работает, даже если он не определен до вызова? - PullRequest
0 голосов
/ 25 января 2019

Я сделал этот тест , и не понимаю вывод

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

void demo()
{
    printf("GeeksQuiz ");
}

Ожидается: ошибка компилятора, потому что я думал, что обычно demo() нужно будет инициализировать перед вызовом в main()?

Фактические результаты: GeeksQuiz GeeksQuiz

Не верно ли мое предположение, что функции, как правило, должны быть определены, прежде чем их можно будет вызывать?

1 Ответ

0 голосов
/ 25 января 2019

функции, как правило, должны быть определены до того, как они могут быть вызваны

Ну, на самом деле, компилятору просто нужно увидеть прототип перед вызовом (использование), форвардной декларации будет достаточно.

В вашем случае, внутри main(),

void demo();

служит этой цели.Обратите внимание, что это , а не вызов функции.

...