Avertissement: C4013 en C lang
#include <stdio.h>
#include <string.h>
void prints(char *menu)
{
int p = 0;
p = navigation(p, menu);
}
int navigation(int p, char *menu)
{
return p;
}
void main(void)
{
char *menu[] = {"data", "coming", "here"};
prints(*menu);
printf("\n");
}
Comment puis-je résoudre ce problème, l'avertissement est:
Avertissement 1 warning C4013: 'navigation'
undefined; en supposant extern retournant
int i*\testingzone\index.c 9
- Dans certains langages (python, PHP, JavaScript, autres), vous pouvez déclarer des fonctions qui appellent d'autres fonctions qui ne sont pas encore définies, et tout ce qui importe, c'est si la fonction est déclarée par le moment de l'appel à la fonction qui l'appelle... si vous voyez ce que je veux dire. C n'est pas comme ça.
Vous devez vous connecter pour publier un commentaire.
Avec les autres suggestions que vous avez reçu pour déclarer la fonction, dans ce cas, vous pouvez simplement réorganiser la fonction définitions:
Ce n'est pas toujours possible. En particulier, vous besoin à utiliser une déclaration quand/si vous avez des fonctions mutuellement récursives (A appelle B et B appelle aussi Une).
J'ai aussi corrigé le comportement non défini à partir de la définition le mauvais type de retour de
main
.De déclarer des fonctions avant de les appeler. Dans votre cas, vous faites une tentative d'appel
navigation
avant de déclarer. C'est légal en C89/90, mais généralement, les résultats d'avertissement du compilateur. C99 spécification du langage C a besoin d'une déclaration, ce qui signifie que votre avertissement va se transformer en une erreur en C99. Donc, si vous venez de le faireavant de tenter d'appeler
navigation
, il disparaîtra.En outre, il est une bonne idée de ne pas seulement de déclarer des fonctions avant de les appeler, mais le fait de les déclarer avec un prototype. C99 n'est pas une obligation, mais c'est néanmoins une très bonne pratique. I. e. il est préférable de déclarer
navigation
commeou
selon vos goûts.
Noter que le texte de votre avertissement du compilateur est trompeuse. Il semble suggérer qu'une définition des fonctions est nécessaire avant l'appel. En réalité, une simple non-définition de la déclaration est tout à fait suffisante.
Il signifie ce qu'il dit; vous essayez d'utiliser la navigation(), qui n'existe pas encore. Vous avez besoin de déplacer de navigation() pour être la première méthode dans le fichier. Alternativement, et de préférence, vous devriez prototype de toutes les fonctions au début du fichier.
Ajouter le prototype
int navigation(int p, char *menu);
quelque part au-dessus de la première foisnavigation
est utilisé. Vous obtenez cette erreur lorsqu'une fonction est utilisée avant qu'elle soit définie.Même ressemble à nouveau montrer l'erreur sur p = navigation(p, menu)