【发布时间】:2021-06-01 21:23:53
【问题描述】:
如果我的术语不完美,我深表歉意,我是一名自学成才的程序员 :) 我的自动机器有不同的移动部件,对于每个部件我都有一个 C 文件来处理它自己的状态机。 每个 C 文件都有一个枚举,定义了该状态机的所有状态,例如:
movingArm.c
enum {
STANDBY = 0,
ARM_OPEN,
ARM_CLOSE,
ARM_WAIT
};
void state_machine_arm()
{
switch(status_arm)
{
case STANDBY:
// ....
break;
/* etc */
}
}
一切运行顺利,但有时我必须从另一个文件检查一个状态机的状态,因此将所有枚举放在一个公共位置以供所有文件访问会很方便。而不是每次都检查哪个数字对应于哪个状态并且有很大的遗漏风险。
所以问题是:在这种情况下,最佳做法是什么?是否可以将所有枚举组合在一个头文件中并包含在所有 .c 文件中?
编辑:
我补充了一些细节,也许我不够清楚。
如果从另一个文件anotherPart.c我想检查手臂的状态:
if( get_status_arm() == ARM_OPEN )
{
// do something
}
我需要知道ARM_OPEN对应什么,所以ARM_OPEN也应该定义在anotherPart.c中
这就是为什么我想到了一个通用的头文件,以避免在 anotherPart.c 中重新声明枚举(如果我必须在枚举中添加或更改某些内容会更烦人)
【问题讨论】:
-
你基本上回答了你的一个问题。只需将
enum放在某个头文件中,然后将其包含在您需要的任何位置 -
请澄清您需要在 .c 文件之间共享的是枚举类型的声明(在这种情况下,@Jabberwocky 评论将是答案)或者您是否指的是需要定义了一个并声明用于许多 .c 文件。您可以通过显示两个或三个文件的minimal reproducible example 来说明您所描述的内容。您可能还需要澄清您是否在执行多线程/任务。
-
@Val 不,这不是坏习惯,它甚至是一种非常流行的做法。
-
is that correct to have multiple enums in a single header file不是最好的例子,但two enums in the same .h file。状态机是人人都写过的东西,网上研究怎么用C写,例子不胜枚举。我的第一个谷歌点击 this pdf 看起来不错。还有stackoverflow.com/questions/133214/….