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

Should the header file containing function prototypes be included in file with definitions?

我试图找出最佳做法。

假设我有一个 C 函数

void myfunc(double);

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

我把函数定义写在myfunc.c


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

我应该在 myfunc.c 中 #include "myfunc.h" 吗?

这不是必需的,但在我看来这是更好的做法。

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

是的。一千次是的!如果你不这样做,它仍然会“工作”,但是,如果你改变了函数定义而不是头文件中的原型(反之亦然),头文件将是 错误的 ,它会导致编译器在其他地方执行错误的调用。这将完全破坏首先使用函数原型和头文件的全部意义。

另见