是什么导致“警告:条件表达式中的指针/整数类型不匹配”?
发布时间:2020-12-16 10:32:27 所属栏目:百科 来源:网络整理
导读:我有一个枚举,一个宏定义和一个所有使用枚举的方法.我无法编译.请考虑以下代码段. typedef enum fruits_t{ APPLE,ORANGE,BANANA} fruits_t;#define KEY_TO_VALUE(x) ((x == APPLE) ? 0 : (x == ORANGE) ? 1 : (x == BANANA) ? 2 : "Undefined")static
我有一个枚举,一个宏定义和一个所有使用枚举的方法.我无法编译.请考虑以下代码段.
typedef enum fruits_t { APPLE,ORANGE,BANANA } fruits_t; #define KEY_TO_VALUE(x) ((x == APPLE) ? 0 : (x == ORANGE) ? 1 : (x == BANANA) ? 2 : "Undefined") static void foo(char fruit) { if (fruit == KEY_TO_VALUE(APPLE)) { /* do something */ } } 这编译,但我得到以下警告. 警告:条件表达式中的指针/整数类型不匹配 警告:指针和整数之间的比较 为什么?我是C的新手,所以如果你能解释一些经验丰富的C开发人员看似显而易见的事情,我会很感激.我的大多数编程知识都是基于Java的. 解决方法
编译器试图找出程序中每个表达式的类型.
诸如x>的表达式. 0? 5:“不”使编译器抓住它的头.如果x大于零,则类型为int,但如果不是,则类型为const char *.这是一个问题,因为没有从指针到int的自动转换(反之亦然).所以编译器警告它. 解决方案是确保无论水果的价值是什么,KEY_TO_VALUE的值都是单一类型.例如,代替“Undefined”(类型为const char *,因为它是文字字符串),您可以使用特殊值,例如-1. 另请注意,APPLE是值为0的常量,ORANGE是值为1的常量,BANANA是值为2的常量(这是枚举的工作原理).所以你不需要KEY_TO_VALUE,因为常量已经有了所需的值.您可以直接将水果与APPLE进行比较: if (fruit == APPLE) { ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |