【问题标题】:C Header Files - Correct Way to IncludeC 头文件 - 包含的正确方法
【发布时间】:2010-11-15 01:20:36
【问题描述】:

我正在尝试自学 C 编程,并且我在 Windows XP 下将 DevC++ 用于我的 IDE。我对调用自己的头文件的正确方法有点困惑。

我有一个名为 main.c 的主源文件和一个名为 myFunctions.c 的函数的单独文件,我使用 'include "myFunctions.h" 将其包含在 main.c 中以及我的所有函数原型驻留在此头文件中。

myFunctions.c 包含两个函数,一个称为 showDate(),一个称为 showScreen(),这两个函数都可以从 main.c 调用。

当我尝试从 showScreen() 中调用 showDate() 时,我的问题开始了,并且在编译/链接期间它抱怨,因为我在 myFunctions.c 中没有 showDate() 的原型。

我想知道我需要做以下哪一项?

  1. 在 myFunctions.c 中包含“myFunctions.h”

  2. 在 myFunctions.h 和 myFunctions.c 中声明 Prototype
  3. 仅在 myFunctions.c 中声明原型

以上所有内容似乎都纠正了编译器错误,并允许我从 main.c 和 myFunctions.c 调用函数 bot,但我找不到正确过程的确定来源。

【问题讨论】:

    标签: c include header


    【解决方案1】:

    在许多地方使用 #1 -- #include。

    永远不要使用 #2 -- 永远不要声明任何东西超过一次。

    很少使用 #3 - 在 .c 文件中声明某些内容,就好像您永远不会重用它一样。

    【讨论】:

    • 在决定 #1 和 #3 之前可能会考虑可见性。如果您需要从其他 .c 文件调用此函数,请使用 #1。如果在本地文件之外的任何地方都不需要该函数,请使用 #3。这样可以减少头文件中的混乱,并且真正能够将它们用作接口定义。
    • 对。从其他地方调用的函数应该在 .h 文件中。内部函数应在 .c 文件中声明为静态并进行原型化。这为 C 提供了一些急需的模块化。
    【解决方案2】:

    头文件应该包含原型。然后在使用这些原型的任何地方都包含它,包括包含函数定义的 .c 文件。

    BTW DecC++ 不再积极开发 - 您应该考虑改用 Code::Blocks

    【讨论】:

    • 谢谢 Neil,稍后我会研究 Code::Blocks
    • Code::Block 很棒——我注意到的第一件事是代码折叠,这是我在 DevC++ Cheers Neil 中真正想要的东西!
    【解决方案3】:

    绝对是第一个选项。

    【讨论】:

      【解决方案4】:

      您应该选择选项 1。或者订购 myfunctions.c 以便被调用函数的定义出现在调用它的函数之前。通过在文件中包含标头,您允许编译器捕获声明和定义之间的任何不匹配。

      【讨论】:

        【解决方案5】:

        正如其他人已经说过的,您应该使用第一个选项。一般规则是,函数原型位于 .h 文件中,而它们的实现位于 .c 文件中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多