代码之家  ›  专栏  ›  技术社区  ›  TCD

包含函数原型的头文件是否应包含在带有定义的文件中?

  •  0
  • TCD  · 技术社区  · 4 年前

    我试图找出最佳做法。

    假设我有一个C函数

    void myfunc(double);

    我将这个函数原型存储在myfunc中。h

    我在myfunc中编写函数定义。c

    
    void myfunc(double p){
    /*
     * Do work
     */
    }
    

    我应该在myfunc.c中#包含“myfunc.h”吗?

    这没有必要,但在我看来,这是更好的练习。

    1 回复  |  直到 4 年前
        1
  •  4
  •   August Karlstrom    4 年前

    是的,你应该这样做,因为它确保函数签名在声明和定义中是相同的。如果它们不匹配,程序将无法编译。包括以下内容也是一个好主意 myfunc.h 在任何其他包含文件之前 myfunc.c 。这样您就知道头文件是自包含的。

        2
  •  1
  •   Steve Summit    4 年前

    对。 一千次是的!如果你不这样做,它仍然会“工作”, 但是 ,如果您更改了头文件中的函数定义,但没有更改原型(反之亦然),则头文件将是 错误的 ,这将导致编译器在其他地方强制执行错误的调用。这将彻底破坏使用函数原型和头文件的初衷。

    另请参见 Compiler warning for function defined without prototype in scope?