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

时间:2020-06-09 12:04:30

标签: c

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;
}

这警告我,我不知道发生了什么。发生了什么事?

1 个答案:

答案 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来避免它。

相关问题