gpt4 book ai didi

c - 您应该将 "typedef enum"放在源代码的什么位置?

转载 作者:太空宇宙 更新时间:2023-11-04 05:10:35 25 4
gpt4 key购买 nike

我正在从事一个比以往更大的项目,并且我正在尽最大努力保持我的代码结构正确。我正在对微 Controller 进行编程并且有一些全局变量,根据我在此处阅读的一些建议,这些变量都定义在“global_variables.h”文件中,该文件包含在使用全局变量的任何地方。

我还将全局变量的 typedef 放入“global_variables.h”文件中。

我遇到的问题是我在其中使用全局变量的 file1.c 有一个函数 1(new_type_t 变量)接受新的 typedef 作为参数。问题是我在头文件 (file1.h) 中定义了 function1 原型(prototype),但是由于 #include "global_variables.h"位于 file1.c 中,因此 file1.h 中的函数原型(prototype)看不到 typedef .

我觉得这很常见,但谷歌搜索似乎并没有提供太多帮助。我是否应该制作一个单独的“global_variables.h”和“global_variables_types.h”,并将 .h 文件包含在我的其他文件的标题中,并将 .c 文件包含在源代码中?

最佳答案

我不认为拥有头文件 global_variables.h 是明智的。

如果您的项目是一个小型的单人项目(例如,少于 50KLOC = 50,000 行源代码),并且您不打算制作一个可重用的库,那么为所有项目使用一个头文件可能是明智的。该头文件将声明全局变量,并在它们之前声明相关类型。您还将声明所有函数,最后定义所有内联函数。您可以考虑将内联函数放在单独的头文件中(包括来自您的主头文件)。

如果您打算制作可重复使用的代码,请为项目的单独子系统制作单独的 header 。但我觉得不需要为所有全局变量都设置标题。

最重要的是,尽量减少全局变量的数量。您应该能够用一只手的手指来计算全局变量。如果您需要超过 4 个或 5 个全局变量,请考虑将相关的全局变量打包在一个全局 struct 中。例如,如果屏幕尺寸在全局数据中,则不要声明 int screen_width, screen_height; 而是声明

 struct {
int width;
int height;
} screen;

当然,真正的事情取决于项目,也许取决于构建链。一些专有编译器并没有真正优化,如果使用全局结构可能会产生错误的代码。如果您使用最新的 GCC(作为交叉编译器,最好是在 Linux 上),您就不会遇到这个问题,因为 GCC 优化得很好。始终在编译器上启用所有警告(例如使用 gcc -Wall -g -O2 构建)

一个很好的建议是研究一些现有免费软件的源代码,与您的类似。

关于c - 您应该将 "typedef enum"放在源代码的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13298329/

25 4 0