Pourquoi un avertissement de “contrôle a atteint sa fin de non-void function” pour la fonction principale?
Je lance le C suivant les codes et reçu un avertissement: le contrôle a atteint sa fin de non-void function
int main(void) {}
Des suggestions?
Parce que le contrôle atteint la fin d'un non-void function. Principal renvoie
Vous devriez trouver un non-ancien compilateur. C99 est implicite
GCC toujours par défaut compile pour quelque chose qu'il appelle “gnu89”, et met en garde.
La vraie question est: pourquoi est-ce que le c99 comité de faire une exception pour le main(). Main() n'est pas différent de toute autre fonction (sauf que c'est le prototype n'est pas dans notre champ de contrôle: d'accord avec elle!). La deuxième question est: pourquoi Microsoft n'a pas mis à jour leur compilateur C pour c99 normes (ce qui C99-thingy efficacement strictement théorique standard)
Je ne peux pas parler pour le comité, mais j'écris jusqu'à une dizaine de programmes en C par jour, et je trouve ça vraiment pratique pour limiter le standard de
int
, pas void
, mais vous n'avez pas une return
déclaration.Vous devriez trouver un non-ancien compilateur. C99 est implicite
return 0
à la fin de main
. C89 est maintenant littéralement un quart de dix ans.GCC toujours par défaut compile pour quelque chose qu'il appelle “gnu89”, et met en garde.
gcc -std=c99
omet l'avertissement. Oh, et j'entends que Visual C est bloqué à C89 trop.La vraie question est: pourquoi est-ce que le c99 comité de faire une exception pour le main(). Main() n'est pas différent de toute autre fonction (sauf que c'est le prototype n'est pas dans notre champ de contrôle: d'accord avec elle!). La deuxième question est: pourquoi Microsoft n'a pas mis à jour leur compilateur C pour c99 normes (ce qui C99-thingy efficacement strictement théorique standard)
Je ne peux pas parler pour le comité, mais j'écris jusqu'à une dizaine de programmes en C par jour, et je trouve ça vraiment pratique pour limiter le standard de
main(){…}
. Je suis triche un peu ici parce que l'implicite int
déplacé hors de C99 dans le même temps, le rendement implicite déplacé, mais il me permet de gagner quelques secondes chaque jour. 🙂OriginalL'auteur alittleboy | 2012-11-19
Vous devez vous connecter pour publier un commentaire.
Vient de mettre
return 0
dans votremain()
. Votre fonction main retourne un int (int main(void)
), par conséquent, vous devez ajouter un retour à la fin de celui-ci.De contrôle atteint la fin d'un non-void function
avertissement: contrôle a atteint sa fin de non-void function
Solution: Ce message d'avertissement est similaire à l'alerte décrit en Retour avec aucune valeur. Si le contrôle atteint la fin d'une fonction et de non-retour est rencontré, GCC suppose un retour sans valeur de retour. Cependant, pour cela, la fonction exige une valeur de retour. À la fin de la fonction, ajoutez une instruction return qui retourne un rendement convenable de la valeur, même si le contrôle n'atteint jamais.
source
Solution:
Vous dites que vous voulez retourner à la Chaîne à l'extérieur de la principale?
oui, je pensais avoir vu le résultat de my_strcpy(ampb, strA);
Ne pas le faire voir pourquoi -> stackoverflow.com/questions/4178869/...
ce qui est bien avec
return EXIT_SUCCESS
au lieu dereturn 0
? C'est plus universelle dans un sens (rend votre code plus portable) et il peut rendre votre code plus lisible, trop. (Notez que vous devez inclurestdlib.h
ensuite)OriginalL'auteur dreamcrash
Comme une alternative à la solution la plus évidente de l'ajout d'un
return
déclarationmain()
, vous pouvez utiliser un compilateur C99 (“gcc -std=c99” si vous utilisez GCC).En C99, il est légal pour
main()
de ne pas avoir dereturn
instruction, puis la finale}
implicitement renvoie 0.Une note que les puristes considèrent important: vous devriez pas fixer l'avertissement en déclarant
main()
que le retour de typevoid
.OriginalL'auteur Pascal Cuoq
La fonction principale a un retour de type int, comme indiqué dans
toutefois, votre principale fonction ne retourne rien, il se ferme après
Ajouter
après cela et il va fonctionner.
OriginalL'auteur Kninnug