【问题标题】:Compiling without including a header file编译时不包含头文件
【发布时间】:2014-01-08 08:26:17
【问题描述】:

在一个特定的 C 项目中,一个文件说 file1.c 使用一个函数说 FUNCTION2()。 FUNCTION2() 在 file2.c 中声明。 FUNCTION2() 的外部声明在 file1.h 中

file1.c 只添加了 file1.h。 在 file1.h 中,没有添加 file2.c/file2.h。仍然编译成功,功能正常。

在工程的编译列表中,首先编译的是file2.c/file2.h。但是不加头文件可以调用函数吗?

【问题讨论】:

  • 标准做法是将 FUNCTION2 的前向 extern 声明放在 file2.h 中,然后将 #include "file2.h" 放在所有调用 FUNCTION2 的源文件中,或者如果您不想使用头文件,请放置源文件顶部的外部函数的本地声明。你真正想做什么?
  • 从另一个角度:想想如果有一天你改变了 file2 中的函数会发生什么,例如其他返回值,那么你需要遍历所有使用该函数的 .c 文件,而不是仅仅更新头文件 2.h,编译器然后会告诉在哪里修复而不是从链接器获得未解决的错误。

标签: c compilation compiler-errors


【解决方案1】:

你可以,但我不建议这样做。你已经安排了一些事情来迫使编译器利用隐式声明

int main()
{
    foo(2); /* The compiler emits this by implicit declaration. */       
    return 0;
}

int foo(int x)
{
    return x;
}

在您的明确情况下,extern 告诉编译器期望 foo 来自不同的编译单元。

标准做法是将foo 的原型放在标题中并包含它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多