Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.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 警告:#188-D:枚举类型与其他类型混合_C - Fatal编程技术网

C 警告:#188-D:枚举类型与其他类型混合

C 警告:#188-D:枚举类型与其他类型混合,c,C,然后我这样声明函数 static enum { TYPE = 'T', [...] } stage = TYPE; //as default 在该函数中,我想通过以下方式将stage_state的值传递给stage: void type_init(uint16_t position, uint8_t stage_state); 这提醒我,我不知道发生了什么。发生了什么事?无论是哪种编译器发出此警告,希望都有文档可以解释为什么最好说明有意将任意整数转换为枚举类

然后我这样声明函数

static enum { TYPE = 'T',
                 [...]
} stage = TYPE; //as default
在该函数中,我想通过以下方式将stage_state的值传递给stage:

void type_init(uint16_t position, uint8_t stage_state);

这提醒我,我不知道发生了什么。发生了什么事?

无论是哪种编译器发出此警告,希望都有文档可以解释为什么最好说明有意将任意整数转换为枚举类型的原因。你可以做得很好,但最好告诉编译器你真的想这么做。需要解决或绕过警告

因此,转换到
enum
类型,告诉编译器您知道自己在做什么。为此,您需要为其类型命名。下面是一个工作示例,它没有对gcc-std=c99-Wall-Wextra-Wpedantic发出警告:

#包括
静态枚举阶段{
类型=42
}舞台;
int
main()
{
uint8阶段状态=51;
阶段=(枚举阶段)阶段\状态;
返回0;
}

如果您不喜欢必须键入
枚举状态
,请查看如何使用
typedef
来避免它。

如何将多字节
char
分配给枚举器?无论如何,只需转换为
enum
类型。无论编译器发出此警告的是什么,都希望有文档可以解释为什么最好声明有意将任意整数转换为枚举类型。你可以做得很好,但最好告诉编译器你真的想这么做。需要解决或绕过警告type'是一个多字符4字节文字(根据您的endianess,其值类似于
0x74797065
),表示匿名枚举的一个可能值,您正在为字段分配
uint8\u t
值。除非目标是赢得一年一度的C混淆比赛,否则我会非常强烈。我的坏,也很高兴知道enum不接受4字节的文字@他们爱管闲事,我完全同意。我只是用C99来证明代码足够基本,即使对于那些出于某种原因仍然停留在古老的C标准上的人来说也是如此。。。感谢我没有使用C89。(等等,目前我的工作是用C++98编写一个嵌入式软件…嗯)
void type_init(uint16_t position, uint8_t stage_state){
     stage = stage_state;
}