在C头文件中应该放置哪些声明?

在C头文件中应该放置哪些声明?,c,header-files,C,Header Files,在我的项目中,几乎每个.c文件都有一个头文件。所有typedef和函数声明都放在头文件中。但这是一种好的做法吗?有些typedef只在一个.c文件中使用。还有一些函数不是由其他源文件中的函数调用的。#include是一个预处理步骤,因此您可以将任何内容粘贴在其中。这在很大程度上是一个风格问题,但最好的编程实践是尽量减少对名称空间的影响。(通常)使用头文件允许在公共和私有之间进行基本区分,公共定义放在头文件中。这样,一个单独的编译单元可以包含头,并在链接它们时解析定义。编译单元私有的任何内容都不应

在我的项目中,几乎每个.c文件都有一个头文件。所有typedef和函数声明都放在头文件中。但这是一种好的做法吗?有些typedef只在一个.c文件中使用。还有一些函数不是由其他源文件中的函数调用的。

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

  • 在公共函数中使用的
    typedef
    (例如,指向函数的指针,该函数用作非
    静态
    函数的参数,该函数也是标题的一部分)
  • enum
    公共函数中使用的值或
    .h
    文件用途的一部分
  • struct
    union
    声明,尤其是在公共函数中。如果所有函数都使用指针值,则不需要定义它们(数据隐藏是一种很好的设计,请参阅)
  • 头文件中的
    #define
    应谨慎使用,以避免名称空间冲突,但有时这是头文件用途的一部分
  • 任何专用符号都应该是静态的,因此有资格进行额外的优化;任何
    static
    都不应该存在,并且
    main
    不需要原型(请参阅)
  • extern
    请参阅
c
文件通常应包括
它是
h
文件。头文件还有一些其他用途;例如,请参阅。

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

  • 在公共函数中使用的
    typedef
    (例如,指向函数的指针,该函数用作非
    静态
    函数的参数,该函数也是标题的一部分)
  • enum
    公共函数中使用的值或
    .h
    文件用途的一部分
  • struct
    union
    声明,尤其是在公共函数中。如果所有函数都使用指针值,则不需要定义它们(数据隐藏是一种很好的设计,请参阅)
  • 头文件中的
    #define
    应谨慎使用,以避免名称空间冲突,但有时这是头文件用途的一部分
  • 任何专用符号都应该是静态的,因此有资格进行额外的优化;任何
    static
    都不应该存在,并且
    main
    不需要原型(请参阅)
  • extern
    请参阅

c
文件通常应包括
它是
h
文件。头文件还有一些其他用途;例如,请参阅。

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