Dev C++ : 'main' must return 'int' - C - Programmation
Marsh Posté le 14-11-2006 à 20:05:52
cybertom87 a écrit : Pourquoi Dev C++ refuse-t-il que je compile mon programme avec un void main() ? |
Tu as peut être durci tes options de compilations, ou alors, tu compiles en C++ (extension .cpp au lieu de .c ?)
De toutes façons main() retourne int, dans tous les cas. Alors respecte les règles et tout ira mieux.
http://mapage.noos.fr/emdel/notes.htm#typemain
EDIT : Hypothèse : Tu compiles en C99. Tu as dû changer quelque chose dans la configuration du compilateur.
Marsh Posté le 14-11-2006 à 22:18:52
J'ai commencé à lire quelques pages, fortes intéressantes, de ton site, et je n'utiliserai désormais plus que les écritures normalisées.
Cependant, pour mon problème, je n'ai ni durci les options de compilation, ni compilé en C++, et ma logique ne me permet pas de comprendre pourquoi le compilateur me refuse celui-ci alors qu'il acceptait l'autre ...
Quoiqu'il en soit, cela fonctionne avec int main().
Et pendant que j'ai quelqu'un de calé sous la main :
entre int main() et int main(void)
à part du coté de la norme, y a-t-il une différence ?
Marsh Posté le 14-11-2006 à 22:21:53
pour la déclaration, () et (void) c'est différent. A la définition, non.
En C++, pas de différence dans les deux cas
Marsh Posté le 15-11-2006 à 13:33:12
des fois dans certain cours moi je trouve ma cette sentaxe :
main()
et d'autre cel-ci:
int main(void)
y a t'il une grane differance ?
Marsh Posté le 15-11-2006 à 14:10:10
big_dadi_fat a écrit : des fois dans certain cours moi je trouve ma cette sentaxe : |
http://mapage.noos.fr/emdel/notes.htm#typemain
main DOIT retourner un entier, c'est la specif
Marsh Posté le 15-11-2006 à 14:29:19
_darkalt3_ a écrit : http://mapage.noos.fr/emdel/notes.htm#typemain |
donc il faut suivre la norme ANSI ...
int main(void)
{
return 0;
}
Marsh Posté le 15-11-2006 à 15:03:08
big_dadi_fat a écrit : des fois dans certain cours moi je trouve ma cette sentaxe : |
en C, non
main n'est pas déclaré mais défini (qui fait une déclaration préalable de main() ? vu qu'on ne peut pas l'appeler soit-même...) et pour une définition ces deux écritures sont équivalente. Pas en C++ ou la 1ere est interdite
Marsh Posté le 15-11-2006 à 16:36:11
le cr retourne 0 si ton prog s'est bien déroule sinon une erreur et donc différent de 0
si tu mets un return 0, c'est un peu domamge car tu geres pas les erreurs.
Marsh Posté le 15-11-2006 à 16:49:54
jesus_christ a écrit : pour une définition ces deux écritures sont équivalente. |
En fait, lorsque le type de retour d'une fonction n'est pas précisé, le compilateur assume qu'il s'agit implicitement d'un int. Je crois que c'est dans la norme.
Disons donc que pour main() ça tombe bien, mais que c'est sale.
(il faut néanmoins vérifier ce que je suis en train d'avancer, parce que je n'en suis pas sûr)
rocodido a écrit : le cr retourne 0 si ton prog s'est bien déroule sinon une erreur et donc différent de 0 |
Non, un programme retourne EXIT_SUCCESS en cas de succès, et EXIT_FAILURE sinon.
Il se trouve que sur Unix, 0 == succès. Ce n'est peut-être pas le cas sur tous les systèmes, d'où ces deux constantes définies dans stdlib.h
Marsh Posté le 15-11-2006 à 16:58:39
Elmoricq a écrit : En fait, lorsque le type de retour d'une fonction n'est pas précisé, le compilateur assume qu'il s'agit implicitement d'un int. Je crois que c'est dans la norme. |
En C K&R et C90, oui. En C99, c'est un bug. Le type est obligatoirement explicite.
Citation : Non, un programme retourne EXIT_SUCCESS en cas de succès, et EXIT_FAILURE sinon. |
La norme dit qu'un programme peut retourner 0 (main:return 0, exit (0)) et que ce 0 a la même sémantique de EXIT_SUCCESS.
Marsh Posté le 14-11-2006 à 20:03:31
Pourquoi Dev C++ refuse-t-il que je compile mon programme avec un void main() ?
Il m'affiche : " 'main' must return 'int' "
En effet, j'ai écrit un autre programme juste avant celui-ci, avec un void main() également, mais Dev C++ ne m'indiquait alors lors de la compilation que :
"[Warning] return type of 'main' is not 'int' "
étrange ...