误导性的消息

时间:2013-11-29 17:36:46

标签: c gcc

我不小心写了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

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.