相关疑难解决方法(0)

如何让gcc警告将错误的枚举传递给函数

gcc似乎没有使用以下代码生成警告.如何让它产生警告?

typedef enum
{
    REG8_A,
    REG8_B,
    REG8_C
}REG8;

typedef enum
{
    REG16_A,
    REG16_B,
    REG16_C
}REG16;

void function(REG8 reg8)
{

}

int main(void)
{
    function(REG16_A);    // Should warn about wrong enum
}
Run Code Online (Sandbox Code Playgroud)

enums gcc gcc-warning

23
推荐指数
3
解决办法
7656
查看次数

C枚举警告

我正在更新物理模拟C代码以使用来自#defines长列表的枚举,但是遇到了一个奇怪的错误.结构包含枚举为:

enum spec_mod_type_enum 
{ SPEC_MOD_PL=1, 
  SPEC_MOD_EXP=2,
} spec_mod_type[NXBANDS];
Run Code Online (Sandbox Code Playgroud)

(NXBANDS只是一个#defined值)

由于疏忽,没有为-1添加密钥,而在另一个文件中,它被修改为:

xplasma->spec_mod_type[n] = -1;
Run Code Online (Sandbox Code Playgroud)

但是,当在clang和gcc中编译时,这会导致无声失败; 该值设置为undefined,而不是-1,带来令人不快的后果.这很奇怪:

  1. 我的印象是enums 可以设置为超出其范围的值.

  2. 我们没有得到关于-Wall(或-Wextra)的警告,当看起来像枚举的确切事情应该警告.

任何人都可以告诉我为什么会发生这种情况?和/或哪些编译器标志会警告我们这一点,或者至少更改枚举的默认行为以允许此设置?

c enums compiler-warnings

3
推荐指数
1
解决办法
841
查看次数

为什么枚举在 C 中作为一种类型存在

我从教科书中了解到,枚举的典型定义如下:

enum weather {
    sunny,
    windy,
    cloudy,
    rain,
} weather_outside;
Run Code Online (Sandbox Code Playgroud)

然后声明一个 var,如下所示:

enum weather weather_outside = rain;
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果可以通过说eg来使用枚举常量rain,它保​​持整数3,那么具有类似类型的更复杂的减速等于3的确切用途和意义是什么enum weather weather_outside = rain;weather_outside因为枚举值只能是编译时常量)?为什么不直接使用 aconst或 宏呢?我有点困惑枚举是否真的有必要?!

c enums

2
推荐指数
1
解决办法
1931
查看次数

标签 统计

enums ×3

c ×2

compiler-warnings ×1

gcc ×1

gcc-warning ×1