作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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正如您所想的那样,所需的类型检查会按照语言标准的规定进行。
您的问题可以通过两种方式解决:
#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/
我是一名优秀的程序员,十分优秀!