即使未在调用之前定义函数,为什么函数调用仍起作用?

时间:2019-01-25 11:12:25

标签: c forward-declaration function-declaration

我已经完成this quiz,但不理解输出结果

#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 :(得分:6)

  

函数通常需要先定义才能被调用

嗯,实际上不是,编译器只需要在调用(使用)之前查看原型。 a bit special就足够了。

在您的情况下,在 <WebView other stuff onShouldStartLoadWithRequest={this.openExternalLink} /> 内,

  openExternalLink= (req) => {
    const isHTTPS = req.url.search('https://') !== -1;

        if (isHTTPS) {
          return true;
        } else {
          if (req.url.startsWith("test://")) {
            this.props.navigation.navigate('Home');
          } 
          return false;
        }
      }

正用于此目的。请注意,这不是函数调用。