• [^] # Re: 2 trucs :)

    Posté par . En réponse au message gros débutant, problême pour compiler (gcc). Évalué à 0.

    en fait,même sans ça, ça compile
    Mouais, "ça compile" n'est pas une preuve que le programme soit correct.
    main DOIT retourner un int. Point. C'est la norme qui le définit très clairement. Un programme C contenant un main ne retournant pas un entier est incorrect. (je crois qu'en C++ c'est possible, mais en tout cas pas en C).

    Ce qui peut changer, ce sont les paramètres de main: soit
    int main(void)
    si tu t'en fous des arguments, soit
    int main(int argc, char *argv[])
    si tu en as besoin, soit
    int main ( /* autre chose */ )
    si tu as envie d'utiliser des extensions fournies par ta plate-forme, mais non portables ("portable" au sens du C).
    Les deux premières sont définies dans la norme, et fonctionneront sur toute implémentation du C (enfin, mis à part les cas des freestanding environments, mais on va passer pour l'instant); la troisième est implementation-defined et donc dépend de l'environnement. Par exemple, le
    int main(int argc, char *argv[] char *env[])
    est une extension commune, qui compilera et fonctionnera sur certaines implémentations, mais n'est pas portable.

    Cela dit, un compilateur C a le droit de rejeter un programme définissant main comme retournant void.

    Et, en passant, pour compiler un programme C avec GCC, une ligne de commande pour avoir les bons avertissements est
    gcc -Wall [ -Wextra | -W ] [ -std=c99 [ -pedantic ]]
    -Wextra est défini depuis la 4.0 je crois, avant c'était -W; et -std=c99 est utile (et même recommandé) pour s'assurer que ton code est correct au sens de la norme C99. Note que ce flag désactive certaines extensions (POSIX, GNU ou autres) qui entrent en conflit avec la norme, donc tu ne pourras pas forcément l'utiliser, suivant ce que tu veux faire. Le -pedantic retournant des avertissements supplémentaires de la norme, et rejete toute extension.