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 :

définition du main


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 415
    Par défaut définition du main
    salut à tous
    le programme suivant ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    int sum_square(int i,int j)
    {
        int resultat;
        resultat = i*i + j*j;
        return(resultat);
    }
     
     
    int abs_diff(int i, int j)
    {
        if (i>j)        return (i-j);
        else return (j-i);
    }
     
     
    int main(int argc, char * argv[]) {
    //    int main(void) {
        printf(abs_diff(x,y));
        printf(sum_square(3,4));
        return (0);
    }
    en fait malgré mes recherches sur google je ne comprend pas ce que je dois mettre comme argument au main
    je comprend intuitivement que ça a un rapport avec le nombre de fonctions ou de variables que j'utilise dans mon programme…
    je précise que je suis sous Mac -> Xcode et je fais "run" simplement
    je n'utilise pas gcc dans le terminal

    si qqn peut m'éclairer… les sites trouvés parlent de "pointeurs" quand ils expliquent les arguments du main mais cela me perd complètement : pointeur vers quoi ?

    merci de votre aide

    ps d'autre part j'ai cru comprendre que les fonctions que je définis doivent être écrites à l'extérieur du main (donc avant le main) ; ai-je bien compris ?

    Vinz

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Les arguments du main sont un tableau de chaînes de caractères (représentées par des pointeurs vers leur premier caractère), et sa taille.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Ton erreur, c'est surtout ton usage de printf.

    printf requiert un premier argument qui est une chaine de format.
    essaie printf("%d", sum_square(1,2));. Puis regarde la documentation de cette fonction (par exemple sur cppreference.com)

    quand main reçoit des arguments, ce sont: le nombre de mots de la ligne de commande, et chacun d'eux.

    Ainsi, quand tu appelles ton programme (disons bidule.exe) avec la commande
    bidule.exe arg1 arg2 "arg tres long" 2 4 \f"
    la fonction main du programme est appelée avec l'équivalent de ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
        char* arguments[] = {"bidule.exe", "arg1", "arg2", "argument en plusieurs mots", "2", "4", "\f", \0}
        int nombre = 7;
        int code_retour = main(nombre, arguments);
    }
    En fait, concrêtement, c'est ce que fait ton OS, mais tu n'as pas les détails.

    La norme garantit que, si ton main est int main(int argc, char**argv):
    • argc>0
    • argv[0] est le nom de la commande ayant servi à invoquer le programme (le nom du .exe, voire son chemin complet). C'est utile pour les messages d'aide
    • argv[argc] == NULL
    • pour tout i dans [0 .. argc[, argv[i] est une chaine de caractère (contenant au minimum un "\0").


    Les noms argc et argv sont à ta guises.
    Tu peux utiliser arg_count et arg_values ou bien nombre_argument et arguments

  4. #4
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 415
    Par défaut
    merci
    la raison pour laquelle je ne comprend pas ce que je dois mettre dans main ni les histoires de pointeur que vous tentez de m'expliquer (merci quand même !) c'est que je lance mon programme C directement depuis Xcode (je ne compile pas et ne lance pas le programme depuis la ligne de commande) donc je ne "vois" rien…
    sinon merci pour le printf j'ai bien compris ce qui n'allait pas et je croyais que le pb venait du main alors qu'il venait du printf
    VD

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    xcode compile ton programme, mais il est configuré pour le faire automatiquement.
    En l'occurence, tu as certainement une console qui affiche "built in ... seconds", et éventuellement d'autres petites informations.

    La preuve, c'est que tu as vu le "ca marche pas". C'était un message de compilation.

  6. #6
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 415
    Par défaut
    oui j'avais compris que Xcode compile mon programme
    ce que je voulais dire c'est que je n'ai pas à lancer de ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monprogramme paramètre1 paramètre 2
    etc donc je ne "vois" pas les paramètres utilisés
    du coup c'est compliqué pour moi de comprendre ces histoires de pointeur etc car je ne fais que, bêtement, faire pomme-R et voir le résultat ; je n'ai pas l'impression d'appliquer le programme sur des paramètres
    voilà
    VD

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. définition de structure dans le main
    Par gbsatti dans le forum Débuter
    Réponses: 10
    Dernier message: 02/12/2010, 19h15
  2. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  3. Définition de "Métalangage"
    Par No dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 19/07/2002, 14h05
  4. execl rend-elle la main?
    Par chezjm dans le forum C
    Réponses: 16
    Dernier message: 03/06/2002, 18h28

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