2013-11-29 2 views
4

я случайно написал 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 * в первом случае?

Что означает это сообщение? Может ли кто-нибудь прояснить это?

Я могу воспроизвести его here тоже после намеренного помещения ошибки.

Компилятор: GCC (GCC) 4.8.1

ответ

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. 
Смежные вопросы