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 :

Différence entre prototypes


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut Différence entre prototypes
    Bonjours,

    pouvez vous m'expliquer quelle est la différence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TYPE   fonction (TYPE   var1, TYPE  var2);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TYPE   fonction (TYPE*   var1, TYPE*  var2);
    avec peut etre n'importe quel type.

    merci d'avance

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Par défaut
    L'étoile fait référence à la notion de pointeur.
    Ce sont donc deux prototypes différents.

  3. #3
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    Non je parle pas de la notion de pointeur, ce que je veux viser à comprendre c'est la notion de passage par valeur et passage par référence et l'impacte sur la qualité du code!

  4. #4
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 080
    Par défaut
    Euh ....


    En langage C, passage par adresse ne se fait que par pointeur.


    Passage par copie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TYPE   fonction (TYPE   var1, TYPE  var2);
    Passage par adresse grace a des pointeurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TYPE   fonction (TYPE*   var1, TYPE*  var2);

    Quand a l'impact sur la qualité du code ... c'est difficile.
    Disons que si tu veux modifier un type primitif, tu passe par adresse, sinon tu passe par copie.

    On pourrai penser que le même raisonnement se tiendrai avec les tableau/structure and Cie.

    Seulement, si la strucutre prend beaucoup de place memoire, la copie va etre longue et donc les performance du programme en prendront un coup.
    Si les performance sont une des priorité, alors le mieux est de passer les structure par pointeur.

    En effet, un pointeur ne vaudrat jamais que 4 octet, c'est insignifiant.

    Le probleme est que si on veut passer une structure mais qu'on en veut pas la modifier, on est un peu coincer.

    La methode pour s'en sortir est de passer la structure par adresse (afin de ne pas penaliser les performance) mais de rajouter le mot clé "const" afin de dire que la structure, meme passer par adresse ne peut etre modifiable.



    Personnelement, j'applique cette regle simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Si la variable est de type primitif (int, char, double ...)
       Si je veux passer sans modifier
           Passage par valeur
       Sinon
           Passage par adresse
    Sinon
       Si je veux passer sans modifier
           Passage par adresse avec le mot clé const
       Sinon
           Passage par adresse

  5. #5
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Le problème ne se pose pas en C, car tous les passages se font par valeur (autrement dit par copie).

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 385
    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 385
    Par défaut
    Attention toutefois pour les tableaux, qui sont traîtres là-dessus.
    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.

  7. #7
    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
    Ca dépend du point de vue utilisé. Etant donné qu'un tableau est, à quelques exceptions près (--> FAQ), toujours convertie par le compilo en l'adresse de son premier élément, on peut dire qu'ils ne font pas exception à la règle évoquée par ssmario2. En effet le pointeur dans en quel le tableau a été converti sera passé par copie à la fonction ...

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 385
    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 385
    Par défaut
    Ce qui est traitre, c'est de pouvoir autoriser la syntaxe tableau (surtout avec la taille!) dans les paramètres formels d'une fonction (traduction: les déclarations de paramètres).
    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.

  9. #9
    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
    Pour ça je suis d'accord, on aurait du interdire la spécification (inutile) de taille d'un tableau lorsque celui-ci se trouve en argument d'une fonction.

Discussions similaires

  1. Différence entre pattern closure module et prototype
    Par jibe84 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/10/2013, 10h55
  2. Différence entre un "bidouilleur" et un Pro ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 290
    Dernier message: 28/11/2011, 11h53
  3. Différence entre TCP, UDP, ICMP
    Par GliGli dans le forum Développement
    Réponses: 1
    Dernier message: 13/09/2002, 09h25
  4. Différences entre jmp, jz, jnz, etc
    Par christbilale dans le forum Assembleur
    Réponses: 3
    Dernier message: 05/07/2002, 16h09
  5. Réponses: 3
    Dernier message: 07/05/2002, 17h06

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