加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

是什么导致“警告:条件表达式中的指针/整数类型不匹配”?

发布时间: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) { ... }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读