我写了一些如下代码,而函数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中的条件表达式相同吗?
我的英语很差,所以如有必要,你可以编辑我的问题。谢谢!
答案 0 :(得分:3)
如果我们查看draft C99 standard部分6.5.15
条件运算符段 3 说:
以下其中一项适用于第二和第三个操作数:
- 两个操作数都有算术类型;
- 两个操作数具有相同的结构或联合类型;
- 两个操作数都有void类型;
- 两个操作数都是指向兼容类型的限定或非限定版本的指针;
- 一个操作数是指针,另一个是空指针常量;或
- 一个操作数是指向对象或不完整类型的指针,另一个是指向合格或非限定版本的void的指针。
struct Node *
和int
与这些条件中的任何一个都不匹配,但似乎不是您的意图。我看到你在这个表达式中使用逗号运算符,但由于逗号运算符具有lowest precedence,所以它实际上是有效的:
return ( operand 1 ? operand 2 : operand 3 ) , NULL;
因此操作数3 的结果不是NULL
而是printf
的返回int
所以很可能你的意思是第三个操作数:
(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 ) ;
^ ^