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 :

definition prototypes de fonctions dans main


Sujet :

C

  1. #1
    Membre averti Avatar de fantomas261
    Inscrit en
    Avril 2007
    Messages
    486
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 486
    Points : 331
    Points
    331
    Par défaut definition prototypes de fonctions dans main
    bonjour,
    je suis debutant en C ( j apprend seul).
    j ai vu qu il fallait definir les prototypes des methodes dans main si on ecrivait la main au debut du programme.
    j ai vu different prototypes

    void (int a, int b) et void(int,int) il y a t il des cas ou il faut ecrire a et b
    pareil avec les pointeurs
    void(int * a,int * b) et void(int*,int*)

    une autre question:
    je programme beaucoup en java et je ne vois pas l interet d utiliser des pointeurs quand on n utilise pas un langage objet ....

    merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 581
    Points
    41 581
    Par défaut
    Je ne comprends rien au début de ton post.

    Quant à l'intéret des pointeurs, c'est (entre autres) ce qui permet à une fonction de retourner deux valeurs (des entiers par exemple) au lieu d'une, sans passer par des trucs bizarre comme une classe supplémentaire ou un array de 1...

    Et on PEUT aussi faire de l'objet en C, et là, ça implique des pointeurs et pas qu'un peu.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par leopard261 Voir le message
    bonjour,
    je suis debutant en C ( j apprend seul).
    => Cours de programmation C

    Citation Envoyé par leopard261 Voir le message
    j ai vu qu il fallait definir les prototypes des methodes dans main si on ecrivait la main au debut du programme.
    C'est un peu ça. En fait, il te faut déclarer (présenter) au programme toute fonction que tu utiliseras. Donc si tu écris la fonction avant de l'appeler l'opération est implicitement faite dans l'écriture sinon faut le faire explicitement

    Citation Envoyé par leopard261 Voir le message
    j ai vu different prototypes

    void (int a, int b) et void(int,int) il y a t il des cas ou il faut ecrire a et b
    T'es pas obligé de mettre les noms des variables dans le prototype. En fait le compilo s'en fout.

    Citation Envoyé par leopard261 Voir le message
    pareil avec les pointeurs
    void(int * a,int * b) et void(int*,int*)
    idem

    Citation Envoyé par leopard261 Voir le message
    une autre question:
    je programme beaucoup en java et je ne vois pas l interet d utiliser des pointeurs quand on n utilise pas un langage objet ....
    Et comment tu ferais une liste chaînée en Java sans pointeur ??? De toute façon la question ne se pose pas car en C il le faut. En fait, il le faut dans 2 cas bien précis
    1) si ta fonction doit modifier la variable qu'elle reçoit => comme elle ne reçoit qu'une copie de cette variable, elle ne modifie que la copie => tu lui passes l'adresse de la variable à modifier => elle stocke cette adresse dans une copie mais elle peut utiliser cette copie pour aller choper directement la variable à modifier
    Exemple qui 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
    void modif(int var)
    {
        var=125;
    }
     
    int main()
    {
        int i=10;
        printf("i=%d\n", i);
        modif(i);
        printf("i=%d\n", i);
    }
    Exemple qui fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void modif(int *var)
    {
        *var=125;
    }
     
    int main()
    {
        int i=10;
        printf("i=%d\n", i);
        modif(&i);      // Je passe l'adresse de "i" qui sera stocké dans le pointeur var
        printf("i=%d\n", i);
    }
    2) si tu as besoin de passer un gros truc (style une grosse structure de 2Go) à une fonction => vaut mieux passer l'adresse de la structure (seulement 4 octets copiés) plutôt que la structure elle-même (qui sera intégralement recopiée dans la fonction)

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par leopard261 Voir le message
    je suis debutant en C ( j apprend seul).
    Comment ? Le C est un langage qui demande rigueur et précision. On ne peut pas l'apprendre 'de rien'. Il faut un cours, un livre, un tutoriel... Il y a des références sur ce site (et le mien).
    j ai vu qu il fallait definir les prototypes des methodes
    Il n'y a pas de 'méthodes' en C. Uniquement des fonctions (et des pointeurs de fonctions).
    dans main si on ecrivait la main au debut du programme.
    j
    On ne définit aucun prototype dans une fonction. Soit on place la fonction avant l'appel de celle-ci et sa définition sert de prototype, soit on place le prototype séparé dans un header (.h).
    ai vu different prototypes

    void (int a, int b) et void(int,int) il y a t il des cas ou il faut ecrire a et b
    pareil avec les pointeurs
    void(int * a,int * b) et void(int*,int*)
    Cesse de bricoler et prend les les moyens d'apprendre le C sérieusement. Tu vas finir par te couper un bras...
    une autre question:
    je programme beaucoup en java et je ne vois pas l interet d utiliser des pointeurs quand on n utilise pas un langage objet ....
    Tout simplement parce qu'il n'y a pas de 'références' en C. Tout se fait par copie de valeur. Si on veut modifier une valeur, on est bien obligé de passer l'adresse.

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Pourquoi les pointeurs seraient plus utile dans un langage objet que procédural ? Il faudrait déja que tu arrives à l'expliquer...

    Un des interets majeurs des pointeurs, pour ma part, c'est qu'on empile plus ou moins 4 octets seulement sur la pile ce qui est trés pratique si mes paramètres sont lourds comme le passage en paramètre d'une fenêtre par exemple ou un téléviseur...

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

Discussions similaires

  1. Insérer 3 fonctions dans main ()
    Par debutenprogrammation dans le forum Débuter
    Réponses: 3
    Dernier message: 23/10/2014, 12h37
  2. inclure fonction dans main()
    Par tata1 dans le forum Débuter
    Réponses: 2
    Dernier message: 02/04/2010, 13h41
  3. Déclaration de fonction dans le "main".
    Par Pragmateek dans le forum C++
    Réponses: 14
    Dernier message: 23/06/2006, 19h32
  4. Réponses: 5
    Dernier message: 15/09/2005, 14h05
  5. Réponses: 6
    Dernier message: 15/09/2005, 14h04

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