C枚举:枚举比较/分配警告

时间:2018-11-11 19:56:30

标签: c gcc enums warnings

我想知道为什么gcc在枚举的比较/赋值时表现出不同。考虑以下示例:

void func(void) {
    enum {foo, bar} e1 = foo;
    enum {baz, qux} e2 = qux;    

    e1 = e2; /* Assignment */
    if (e1 == e2) /* Comparison */
        /* Do something */
}

当我编译这段代码时

gcc main.c -o bin -std=c11 -Wall -Wextra -Wpedantic

对于枚举比较,我会收到警告,但对作业却不会:

warning: comparison between ‘enum <anonymous>’ and ‘enum <anonymous>’ [-Wenum-compare] if (e1 == e2) ^~

  1. 有人可以解释这种行为吗?
  2. 是否有一个编译器标志,可启用对分配不同枚举的警告?
  3. 如果没有这样的标记,那么有人可以想到一种更安全的方法来实现上述功能吗? (不是特别有用,但通常具有相同潜在缺点的函数)

0 个答案:

没有答案