我不小心写了foo ((struct Node* ) head);
而不是foo ((Node* ) head);
我从编译器收到了一条消息
expected 'struct Node *' but argument is of type 'struct Node *'
#include <stdio.h>
typedef struct NODE
{
char data;
struct NODE *next;
} Node;
void foo (Node *head){}
void bar (void *head)
{
// note:
foo ((struct Node* ) head);
}
int main(){
return 0;
}
这是误导性的,在第一种情况下不应该是Node *
或struct NODE *
吗?
这条消息是什么意思?任何人都可以澄清一下吗?
在故意输入错误之后,我也能够重现它{。{3}}。
编译器:gcc(GCC)4.8.1
答案 0 :(得分:3)
这是一个bug in GCC。你认为'预期'应该是struct NODE *
或Node *
,这是正确的。对于它的价值,clang给出了一个更好的信息:
example.c:13:8: warning: incompatible pointer types passing 'struct Node *' to
parameter of type 'Node *' (aka 'struct NODE *')
[-Wincompatible-pointer-types]
foo ((struct Node* ) head);
^~~~~~~~~~~~~~~~~~~~
example.c:8:17: note: passing argument to parameter 'head' here
void foo (Node *head){}
^
1 warning generated.