我正在使用 ncurses 用 C 语言编写 Pong 游戏。我将球、玩家和 AI 对手的函数定义分别放入 ball.c
、player.c
和 ai.c
中。每个文件都包含另一个文件pong.h
,其中包含函数原型(prototype)、结构定义和全局变量。我的主要函数在 pong.c
中,它提供游戏循环并处理按键。
我的项目还包括许多库:ncurses.h
、stdlib.h
和 time.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/