我的项目中几乎每个.c文件都有一个头文件。所有typedef和函数声明都放在头文件中。但这是一个好习惯吗?某些typedef仅用于其中一个.c文件。另外一些函数不会被其他源文件中的函数调用。
答案 0 :(得分:2)
#include
是一个预处理步骤,所以你可以坚持下去。这在很大程度上是一个样式问题,但最好的方法是尽量减少对命名空间的影响。 (通常)使用头文件允许在 public 和 private 之间进行原始区分,并将公共定义放入标头中。这样,单独的编译单元可以包含标题,并在链接它们时解析定义。除非 public 声明将其作为依赖项,否则不应包含任何私有到编译单元的内容。一些有用(或必要)放入头文件的东西,
typedef
(例如,用作非static
函数的参数的指向函数的指针,也是标题的一部分); enum
在 public 函数中使用的值,或者是.h
文件用途的一部分; struct
或union
声明,特别是如果它们属于公共职能部门。如果所有函数都使用指针值,则不需要定义它们(数据隐藏是好的设计,请参阅What is the difference between a definition and a declaration?); #define
以避免名称空间冲突,但有时它是标题目的的一部分; static
,因此有资格获得额外优化;任何static
都不应该在那里,main
不需要原型,(参见Declare main prototype); extern
请参阅C: What is the use of 'extern' in header files?。 c
文件通常应#include
为h
个文件。头文件也有一些其他用途;例如,请参阅https://en.wikipedia.org/wiki/X_Macro。