Dev C++ : 'main' must return 'int'

Dev C++ : 'main' must return 'int' - C - Programmation

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

Reply

Marsh Posté le 14-11-2006 à 20:03:31   

Reply

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() ?
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 ...


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.


Message édité par Emmanuel Delahaye le 15-11-2006 à 17:01:18

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

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 ?

Reply

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

Reply

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 ?
 

Reply

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 :
main()
et d'autre cel-ci:
int main(void)
y a t'il une grane differance ?


http://mapage.noos.fr/emdel/notes.htm#typemain
 
main DOIT retourner un entier, c'est la specif

Reply

Marsh Posté le 15-11-2006 à 14:29:19    

_darkalt3_ a écrit :

http://mapage.noos.fr/emdel/notes.htm#typemain
main DOIT retourner un entier, c'est la specif


donc il faut suivre la norme ANSI ...
int main(void)
{
 
   return 0;
}

Reply

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 :
main()
et d'autre cel-ci:
int main(void)
y a t'il une grane differance ?


 
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

Reply

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.

Reply

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

Message cité 1 fois
Message édité par Elmoricq le 15-11-2006 à 16:51:38
Reply

Marsh Posté le 15-11-2006 à 16:49:54   

Reply

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

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.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 15-11-2006 à 17:01:43    

Merci pour ces corrections/précisions. [:romf]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed