static enum { TYPE = 'T',
[...]
} stage = TYPE; //as default
比我以这种方式声明功能
void type_init(uint16_t position, uint8_t stage_state);
在该函数中,我想通过这种方式将stage_state的值传递到阶段:
void type_init(uint16_t position, uint8_t stage_state){
stage = stage_state;
}
这警告我,我不知道发生了什么。发生了什么事?
答案 0 :(得分:1)
无论哪种编译器发出此警告,都希望有说明其原因的文档,该文档解释为什么最好陈述将任意整数转换为枚举类型的故意。您可以很好地做到这一点,但是最好告诉编译器您确实要这么做。警告在那里得到解决或避免!
因此,强制转换为enum
类型,以告诉编译器您知道自己在做什么。为此,您需要给它的类型起一个名字。这是一个有效的示例,使用gcc -std=c99 -Wall -Wextra -Wpedantic
不会给我任何警告:
#include <stdint.h>
static enum Stage {
TYPE = 42
} stage;
int
main()
{
uint8_t stage_state = 51;
stage = (enum Stage) stage_state;
return 0;
}
如果您不想键入enum State
,请查找如何使用typedef
来避免它。