假设我有这样的代码
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.h
中加入foo.c
?没有它它仍然可以工作。
答案 0 :(得分:3)
你是对的,你不必在模块的C文件中包含模块的头文件。
您可能希望这样做有几个原因。 (以下是非详尽的清单)。
正如其他人所说,它有助于确保头文件中的声明与C文件中的定义一致。当从另一个模块调用一些或所有例程时,这尤其重要。换句话说,这可以帮助减少错误。
它可以安全,快速地为您在文件中放置例程提供一点灵活性。当然,这可以通过C文件中的前向声明来实现,但是如果要从另一个模块调用例程,那么请保存额外的输入(以及可能的拼写错误)并使用头文件包含。你为什么要灵活性?它允许您按照您认为适合的可维护性和可读性对例程进行分组。
有助于保持包含文件列表更精简,更清晰。据推测,您的模块头文件将包含它需要的任何内容。因此,包含该头文件意味着您不必明确包含所有这些额外的头文件。经验告诉我,精益包含列表的模块通常具有较少的WTF时刻(以及对编译时间的积极影响非常小)。
希望这有帮助。