为什么要包含当前.c文件的头文件?

Why should I include the header file of the current .c file?

假设我有这样的代码

foo.h

#pragma once
#ifndef _HEADER
#define _HEADER
//code
#endif

foo.c

#include "header.h" 
//code

main.c

#include "foo.h"

int main() {

    return 0
}

为什么我应该在 foo.c 中包含 foo.h?没有它它仍然可以工作。

您是正确的,您不必在模块的 C 文件中包含模块的头文件。

您可能希望这样做的原因有几个。 (以下是一个非详尽的清单)。

  1. 正如其他人指出的那样,它有助于确保头文件中的声明与 C 文件中的定义一致。当要从另一个模块调用某些或所有例程时,这一点尤为重要。换句话说,这有助于减少错误。

  2. 它可以安全快速地让您在文件中放置例程的位置上有一点额外的灵活性。当然,这可以通过 C 文件中的前向声明来实现,但如果要从另一个模块调用例程,则可以避免额外的输入(和可能的拼写错误)并利用头文件包含。你为什么想要灵活性?它允许您根据可维护性和可读性对例程进行分组。

  3. 它有助于使您的包含文件列表更简洁。据推测,您的模块的头文件将包含它需要的任何内容。因此,包含该头文件意味着您不必显式包含所有这些额外的头文件。经验告诉我,具有精益包含列表的模块通常具有更少的 WTF 时刻(以及对编译时间的积极影响非常小)。

希望对您有所帮助。