c - 哪个文件应包含我的 c 项目中的库?

标签 c include header-files

我正在使用 ncurses 用 C 语言编写 Pong 游戏。我将球、玩家和 AI 对手的函数定义分别放入 ball.cplayer.cai.c 中。每个文件都包含另一个文件pong.h,其中包含函数原型(prototype)、结构定义和全局变量。我的主要函数在 pong.c 中,它提供游戏循环并处理按键。

我的项目还包括许多库:ncurses.hstdlib.htime.h。我应该在哪里包含这些库?目前,它们包含在 pong.h 中,如下所示:

#ifndef _PONG_H
#define _PONG_H

#include    <ncurses.h>
#include    <stdlib.h>
#include    <time.h>

/* everything else */

#endif

但是,只有某些文件使用 stdlib.h/time.h 中的函数。这让我相信,在使用它们的文件中仅包含一次性库可能更有意义。另一方面,将所有库包含在一个地方更为简单。

我想知道是否有一种被认为更传统或更有效的方法来做到这一点。

最佳答案

没有硬性规定,您应该平衡方便和卫生。您已经知道元包含对于其他 .c 文件来说更方便,但我将强调一些与头文件更模糊的问题:

  • 将依赖项(例如 ncurses.h)放入公共(public)头文件中可能会使将头文件包含在其他项目中变得更加困难
  • 头文件的传递成本将主导编译时间,因此减少不必要的包含将使您的项目编译得更快。 Programs已开发用于管理包含内容。
  • 头文件可能会相互破坏性地干扰,例如因为宏会更改随后包含的头文件的语义。 windows.h 可能是最臭名昭著的罪魁祸首,对于大型头文件或大型头文件集,风险可能难以量化。
  • 随着时间的推移,实际应该捆绑哪些头文件就会变得显而易见,例如当便利效益高且风险和成本低时。在一个小项目中,也许从一开始就很明显。

关于c - 哪个文件应包含我的 c 项目中的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70466539/

相关文章:

从结构调用函数(C/汇编)

c++ - C++ Headers可以叫vector.h还是matrix.h?

jquery - Django - 使用 Ajax/Ajah 加载页面片段

php - 包含带有数字键的数组失败

C++ : Using typedefs across multiple files in a namespace.

c++ - 2个c源文件之间的函数指针操作导致编译时错误

c - linux 内核中自旋锁并发导致的内核崩溃

c - 如果将堆栈变量的地址传递给 pthread 函数会怎样?

c - 如何将 2D Char 数组传递给另一个函数?

c++ - 在单独的文件中运行对象的成员函数