Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 具有3个状态的变量(同时具有其中一个状态变量)_C_Types - Fatal编程技术网

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代码库”要广泛得多。