1

DeleteNextNode当函数返回一个名为的类型时,我编写了一些代码如下Position

return (the_checked_position->next == position_to_delete) ?
     DeleteNextNode(the_checked_list, the_checked_position) :
     printf("%s\n", "No such node in the list, delete failed."), NULL;

但是语法 checher 插件会发出警告:pointer/integer type mismatch in conditional expression ('Position' (aka 'struct Node *') and 'int')

那么表达式的类型必须与C中的条件表达式相同吗?

我的英语很差,因此您可以根据需要编辑我的问题。谢谢!

4

1 回答 1

3

如果我们看一下C99 标准部分草案6.5.15 条件运算符3段说:

第二个和第三个操作数应满足以下条件之一:

— 两个操作数都有算术类型;

— 两个操作数具有相同的结构或联合类型;

— 两个操作数都有 void 类型;

— 两个操作数都是指向兼容类型的合格或不合格版本的指针;

— 一个操作数是指针,另一个是空指针常量;或者

— 一个操作数是指向对象或不完整类型的指针,另一个是指向 void 的限定或非限定版本的指针。

astruct Node *并且int不符合任何这些标准,但这似乎不是您的意图。我看到您在此表达式中使用了逗号运算符,但由于逗号运算符优先级最低,因此实际上是这样的:

return ( operand 1 ? operand 2 : operand 3 ) , NULL;

因此,不是操作数 3的结果,而是NULL它的返回,printfint很可能是您对第三个操作数的真正含义:

(printf("%s\n", "No such node in the list, delete failed."), NULL)

这将符合上述标准,并且可能是您最初想要的。完全更正的代码是这样的,在代码下方添加了括号:

return (the_checked_position->next == position_to_delete) ?
 DeleteNextNode(the_checked_list, the_checked_position) :
 ( printf("%s\n", "No such node in the list, delete failed."), NULL ) ;
 ^                                                                  ^ 
于 2013-10-15T02:18:02.830 回答