【问题标题】:What declarations should be placed in a C header file?哪些声明应该放在 C 头文件中?
【发布时间】:2018-05-29 21:18:42
【问题描述】:

我的项目中几乎每个 .c 文件都有一个头文件。所有类型定义和函数声明都放在头文件中。但这是一个好习惯吗?某些 typedef 仅在 .c 文件之一中使用。还有一些函数不会被其他源文件中的函数调用。

【问题讨论】:

  • 如果它们没有在其他任何地方使用(即它们是“私有的”),那么没有理由在头文件中声明它们。
  • 真正只适用于 .c 模块的函数和“全局”变量可以声明为静态的。

标签: c header-files


【解决方案1】:

#include 是一个预处理步骤,因此您可以在其中粘贴任何内容。这在很大程度上是一个风格问题,但最好的编程实践是尽量减少对命名空间的影响。 (通常)使用头文件可以在 publicprivate 之间进行原始区分,并将 public 定义 放在头文件中。这样,一个单独的编译单元可以包含标头并在链接它们时解析定义。除非 public 声明将其作为依赖项,否则不应包含编译单元 private 的任何内容。一些有用(或必不可少)的东西放在头文件中,

  • public 函数中使用的typedef's,(例如,一个指向函数的指针,用作非static 函数的参数,它也是标题的一部分);
  • enum 值在 public 函数中使用或属于 .h 文件用途的一部分;
  • structunion 声明,尤其是在公共函数中时。如果所有函数都使用指针值,则不需要定义它们,(数据隐藏是很好的设计,请参阅What is the difference between a definition and a declaration?);
  • 头文件中的#define 应谨慎使用以避免命名空间冲突,但有时它是头文件目的的一部分;
  • 任何私有符号都应该是static,因此可以进行额外优化;任何static 都不应该存在,main 不需要原型,(参见Declare main prototype);
  • externC: What is the use of 'extern' in header files?

c 文件通常应为#include 它是h 文件。头文件还有其他一些用途;例如,请参阅https://en.wikipedia.org/wiki/X_Macro

【讨论】:

    猜你喜欢
    • 2011-07-29
    • 2013-10-07
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多