【问题标题】:C89: Need to declare functions before referncing them?C89:需要在引用函数之前声明它们吗?
【发布时间】:2010-02-23 02:00:36
【问题描述】:

我是 C89 的新手,看来您必须在调用它之前声明一个函数。所以这是不可接受的:

void foo() {
    bar();
}

void bar() {
    // do stuff
}

因为bar() 是在文件中foo() 之后定义的。有没有办法解决这个问题?需要头文件吗?

【问题讨论】:

    标签: header c89


    【解决方案1】:

    添加原型:

    void bar(); // prototype for function bar() which is implemented later
    
    void foo() {
        bar();
    }
    
    void bar() {
        // do stuff
    }
    

    对于具有多个源代码文件的项目,原型通常会放在头文件中并包含在多个源文件中;只需在单个源文件中指定实现即可。编译器只需要原型能够执行正确的类型检查等。

    【讨论】:

      【解决方案2】:

      此外,如果不需要从文件外部调用函数(即,如果函数可以设为“静态”),那么您通常可以简单地对文件中的函数进行排序,以便编译器看到定义函数使用前的函数。

      【讨论】:

      • 但是,这种方法在某些情况下会失败,包括相互递归的函数(a() 调用b()b() 可能再次递归调用a(),等等)。
      猜你喜欢
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多