IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

La fonction main()


Sujet :

C

  1. #21
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    Citation Envoyé par Melem Voir le message
    Même pas dans les annexes :



  2. #22
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Dans la norme C89, on trouve aussi :
    A.6.5 Common extensions

    The following extensions are widely used in many systems, but are not portable to all implementations. The inclusion of any extension that may cause a strictly conforming program to become invalid renders an implementation nonconforming. Examples of such extensions are new keywords, or library functions declared in standard headers or predefined macros with names that do not begin with an underscore.
    A.6.5.1 Environment arguments

    In a hosted environment, the main function receives a third argument, char *envp[] , that points to a null-terminated array of pointers to char , each of which points to a string that provides information about the environment for this execution of the process (2.1.2.2).

  3. #23
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Dans la norme C89, on trouve aussi :
    dans une section 'non normative' ...

  4. #24
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    dans une section 'non normative' ...
    Je n'ai pas dit le contraire mais ais simplement cité ma référence.

  5. #25
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Je n'ai pas dit le contraire mais ais simplement cité ma référence.
    péché par omission.

    1 - tu cites la norme
    2 - tu oublies de dire que ce que tu cites n'est pas la norme.

    Confusion du lecteur non averti assurée.

  6. #26
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    Et pour ces définitions-là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    main (void)
    {
      /* ... */
    }
    Vous savez à quel endroit la norme en parle ? Ou bien ce n'est plus supporté du tout depuis la normalisation du C ?

  7. #27
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Le implicit int était autorisé en C90. Il n'est plus autorisé en C99.

  8. #28
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    Merci, j'ai trouvé la référence dans le draft de C89 en cherchant avec "implicit int" :
    If the expression that precedes the parenthesized argument list in a function call consists solely of an identifier, and if no declaration is visible for this identifier, the identifier is implicitly declared exactly as if, in the innermost block containing the function call, the declaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern int identifier();
    appeared.
    http://megaton.obfuscated.net/~orang...t.html#3.3.2.2

  9. #29
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Et une qui dit également que lorsqu'on définit une fonction sans préciser le type de retour, comme dans ton exemple avec main, alors son type de retour est int (et non void).

  10. #30
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Si nous faisons abstraction du cas de main, pour une fonction, les déclarations

    int foo(void) { ...; }
    int foo() { ...; }


    ne sont pas strictement équivalentes.

    Dans le premier cas, nous disons que la fonction foo n'a pas d'argument et le compilo va raler lorsqu'il rencontrera foo(1).
    Dans le second, pour des raisons de compatibilités, il va accepter une liste quelconque de paramètres.

    Dans le cas de main, cela ne va pas changer grand chose puisque "son prototype" ne sera jamais utilisé. Les implications sont a rechercher dans le "non-fonctionnel" (maintenabilité, lisibilité,...).

    En gros, c'est une question de "style". Elle tourne autour de l'intérêt à être "plus précis" et s'imposer une discipline dans la cohérence de son écriture allant (souvent) au delà du nécessaire (côté fonctionnel).

    Sans vouloir entrer dans ce débat, je pense que si on fait un tuto, il sera préférable d'utiliser int main(void)...
    Si on fait un exemple vite fait pour illustrer ses propos dans une réponse du forum, on pourra être plus laxiste.

    - W
    Je partage aussi cet avis. Le langage C semble plus permissif que C++, et le fait d'adopter une attitude rigoureuse est la meilleure solution, ne serait-ce que pour des raisons de rétro compatibilité.

    Par ailleurs, la forme

    contrairement à

    ne vas à l'encontre d'aucune des normes du C, alors autant ne pas s'en priver.

  11. #31
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par maxim_um Voir le message
    Par ailleurs, la forme

    contrairement à

    ne vas à l'encontre d'aucune des normes du C, alors autant ne pas s'en priver.
    La deuxième forme est valide également. Voir posts plus haut.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  12. #32
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    La deuxième forme est valide également. Voir posts plus haut.

    Thierry
    Valide mais peut potentiellement entraîner un comportement indéterminé comme je l'ai expliqué plus haut donc si on parle de bonne pratique de programmation, elle est à éviter!!!

  13. #33
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Valide mais peut potentiellement entraîner un comportement indéterminé comme je l'ai expliqué plus haut donc si on parle de bonne pratique de programmation, elle est à éviter!!!
    Je n'ai pas dit qu'elle était conseillée, j'ai dit qu'elle était valide.
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  14. #34
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    Valide peut-être pas, ou plus pour longtemps en tout cas.

    voilà ce que dit C99: (je suis sûr qu'il y en a qui pensent à DBZ)

    6.11.4 Function declarators

    #1

    The use of function declarators with empty parentheses (not prototype-format parameter type declarators) is an obsolescent feature.
    En d'autres termes si tu spécifies à ton compilateur que tu programmes selon les normes les plus récentes, tu auras certainement droit à quelques «warnings».

  15. #35
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Personne n'a dit que c'était conseillé en C99, mais ça reste valide, c'est bien ce qu'on a dit depuis le début. La quasi totalité des exemples (si ce n'est pas : tous les exemples) du document duquel tu as tiré ce 6.11.4 Function declarators ne mettent rien entre les parenthèses dans la définition de main.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 21
    Dernier message: 20/06/2006, 17h49
  2. fonction main en C++
    Par steph_nied dans le forum C++
    Réponses: 3
    Dernier message: 26/05/2006, 16h03
  3. arguments dans ma fonction main
    Par salseropom dans le forum C
    Réponses: 10
    Dernier message: 16/03/2006, 00h12
  4. la fonction main
    Par harvouj dans le forum Langage
    Réponses: 1
    Dernier message: 13/02/2006, 02h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo