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 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