C 具有3个状态的变量(同时具有其中一个状态变量)
我明白这是一个棘手的问题,但我会尽力用最好的方式来解释 我希望一个变量能够假设三个可能值中的一个,其中两个是特定的“标志值”(C 具有3个状态的变量(同时具有其中一个状态变量),c,types,C,Types,我明白这是一个棘手的问题,但我会尽力用最好的方式来解释 我希望一个变量能够假设三个可能值中的一个,其中两个是特定的“标志值”(STATE1和STATE2),第三个是数字无符号长 例如,我可以有这样一个数组: {STATE1, 3984902, 20304, STATE2, STATE1, 3021289129} 是否可以在C中执行此操作?您可以使用具有两个字段的结构,而第一个字段将指示这些自定义离散状态中的一个,另外一个状态将指示要用作数值的另一个字段: typedef enum {
STATE1
和STATE2
),第三个是数字无符号长
例如,我可以有这样一个数组:
{STATE1, 3984902, 20304, STATE2, STATE1, 3021289129}
是否可以在C中执行此操作?您可以使用具有两个字段的结构,而第一个字段将指示这些自定义离散状态中的一个,另外一个状态将指示要用作数值的另一个字段:
typedef enum
{
STATE1,
STATE2,
STATE3
} dstate_t;
typedef struct
{
dstate_t dstate; // Discrete state
unsigned long val; // The value for STATE3
} state_t;
然后你可以有一个状态的数组,比如
{{STATE1, 0}, {STATE3, 3984902}, {STATE3,20304}, {STATE2, 0}, {STATE1, 0}, {STATE3,3021289129}}
您可以使用具有两个字段的结构,而第一个字段将指示这些自定义离散状态中的一个,另外一个状态将指示要用作数值的另一个字段:
typedef enum
{
STATE1,
STATE2,
STATE3
} dstate_t;
typedef struct
{
dstate_t dstate; // Discrete state
unsigned long val; // The value for STATE3
} state_t;
然后你可以有一个状态的数组,比如
{{STATE1, 0}, {STATE3, 3984902}, {STATE3,20304}, {STATE2, 0}, {STATE1, 0}, {STATE3,3021289129}}
包含两个字段的结构。其中一个将指示STATE1到STATE3,当它是STATE3时,它将使用int值查看第二个字段。“但我猜你对你的作业的解释太过直截了当了。”尤金尼什。这就是我想要的,如果你能回答我,我会接受的。谢谢包含两个字段的结构。其中一个将指示STATE1到STATE3,当它是STATE3时,它将使用int值查看第二个字段。“但我猜你对你的作业的解释太过直截了当了。”尤金尼什。这就是我想要的,如果你能回答我,我会接受的。谢谢再次感谢!只有一个问题:为什么在这里使用typedef
?如果我不使用它,会有什么问题吗?@Robb1那么你必须一路携带enum
和struct
关键字。只是方便而已。。。。这是一种纯粹的风格考虑,不同的意见是不同的。我当然会接受“广泛使用”的说法,@Lundin,但“无处不在的行业标准”似乎有点强,即使你例外。@Lundin,我相信你很清楚,“我不知道其他风格”与“没有其他风格”完全不同。我还注意到,尽管POSIX在这方面并不一致,但POSIX接口使用的多个数据结构没有定义typedef
。例如,C标准库甚至做到了这一点--struct timespec
。这比“Linux代码库”要广泛得多。再次感谢!只有一个问题:为什么在这里使用typedef
?如果我不使用它,会有什么问题吗?@Robb1那么你必须一路携带enum
和struct
关键字。只是方便而已。。。。这是一种纯粹的风格考虑,不同的意见是不同的。我当然会接受“广泛使用”的说法,@Lundin,但“无处不在的行业标准”似乎有点强,即使你例外。@Lundin,我相信你很清楚,“我不知道其他风格”与“没有其他风格”完全不同。我还注意到,尽管POSIX在这方面并不一致,但POSIX接口使用的多个数据结构没有定义typedef
。例如,C标准库甚至做到了这一点--struct timespec
。这比“Linux代码库”要广泛得多。