Pourquoi suis-je une initialisation à partir d'incompatible pointer type d'avertissement?
Donc je suis en utilisant gcc sous Linux et que les deux extraits de code dans des fichiers séparés (seulement relaveant sections de code inclus):
int main()
{
/* Code removed */
int_pair_list *decomp = prime_decomp(N);
if (decomp)
while(decomp->next)
decomp = decomp->next;
printf("%d\n" decomp->value_0);
}
int_pair_list *prime_decomp(unsigned int n)
{
int_pair_list *head = malloc(sizeof(*head));
int_pair_list *current;
/* method body removed, current and head remain as int_pair_list pointers */
return current ? head : NULL;
}
Le programme compile et s'exécute correctement mais lors de la compilation, j'obtiens l'avertissement:
problem_003.c: In function ‘main’:
problem_003.c:7:26: warning: initialization from incompatible pointer type [enabled by default]
int_pair_list *decomp = prime_decomp(N);
^
Je suis novice en C et j'ai juste ne peux pas savoir pourquoi je reçois ce message d'avertissement.
- Est la fonction déclarée avant main?
int_pair_list *head = malloc(sizeof(*head))
? ouint_pair_list *head = malloc(sizeof(head))
?- Voir le numéro de ligne, je ne pense pas que ce prototype est déclarée.
- Alors ça y est, je suppose...
- nopes,
sizeof(*head)
est correct.
Vous devez vous connecter pour publier un commentaire.
En C une fonction (ou prototype) doit être déclarée avant il est utilisé afin de déterminer la bonne signature. Sinon, le compilateur va essayer de "deviner" la signature correcte. Alors qu'il est possible de déduire les types de paramètres de l'appel, il n'est pas le cas avec la valeur de retour de type, qui est la valeur par défaut
int
. Dans votre code, la fonction n'était pas un prototype avant l'utilisation, de sorte que le compilateur est en supposant qu'il est de retourint
. C'est la raison pour laquelle il est pour vous avertir au sujet incompatible type d'affectation.