gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:26:52 27 4
gpt4 key购买 nike

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
}

最佳答案

这种行为的原因是您使用的是 C 编译器而不是 C++。和 in C枚举类型并不是真正的类型,C 中的枚举只保存 int 常量,它们可以与任何整数和任何算术自由混合。
在 C++ 中,你有 real enums正如您所想的那样,所需的类型检查会按照语言标准的规定进行。
您的问题可以通过两种方式解决:

  • 使用 C++ 编译器。
    通过这种方式,您将拥有真正的枚举,如您所愿。
  • 将您的代码更改为纯 C 风格,即不使用枚举,因为在 C 中它们只是常量集,编译器仅帮助您对常量值进行排序。在 C 中,您将负责保持传递的常量的“类型”一致。再说一次:对于 C,枚举成员只是 int 常量,您不能将它们输入。
  • #define REG8_A 0
    #define REG8_B 1
    #define REG8_C 2

    #define REG16_A 0
    #define REG16_B 1
    #define REG16_C 2

    关于gcc - 如何让 gcc 警告将错误的枚举传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4669454/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com