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 :

Structure en paramètre d'une fonction


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Par défaut Structure en paramètre d'une fonction
    Bonjour,

    J'ai une question très basique peut être même débile que voici :

    Lorsque je passe une structure en paramètre d'une fonction (utilisée seulement en lecture) il est plus standard de passer par le pointeur (cas 1) ou directement la variable (cas 2) ? quel est la bonne pratique ? le mieux optimisé pour l'embarqué par exemple ?

    cas 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void fonction(Structure* structure)
    {
        printf("%d\n",structure->a);
        printf("%d\n",structure->b);
    }

    cas 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void fonction(Structure structure)
    {
        printf("%d\n",structure.a);
        printf("%d\n",structure.b);
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Si la structure est assez petite, une copie est plus effective.
    Si non, en l'absence de référence, il faudra un pointeur. Et dans ce cas il devrait être const.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Par défaut
    Merci pour ta réponse.

    Pourrais-tu me dire pourquoi "une copie est plus effective" ? Et qu'est ce qu'une structure "assez petite" ? j'imagine que c'est différent si on parle d'un microcontrôleur 8 bits ou bien d'un processeur 64 utilisé sur PC.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    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 827
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par akaDev Voir le message
    Pourrais-tu me dire pourquoi "une copie est plus effective" ?
    Personnellement je préconise de toujours passer l'adresse. Je trouve plus simple à programmer si on adopte toujours la même attitude. Car au-moins une adresse on connait sa taille (32 ou 64 bits selon l'OS) alors qu'une structure elle...

    Citation Envoyé par akaDev Voir le message
    Et qu'est ce qu'une structure "assez petite" ?
    Ben à la limite une structure plus petite que 64 bits. Mais bon est-ce que ça vaut la peine de se faire ch... ? Enfin bon tout est relatif. Par exemple moi je parle depuis mon environnement de travail bien confortable avec mes 8 coeurs et mes 64G de ram. C'est sûr que celui qui travaille sur un µc et qui en est à compter ses bits lui il peut effectivement commencer à essayer de gagner tout ce qu'il peut.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 773
    Par défaut
    Hello,

    Et aussi, le passage par adresse permet de savoir si le paramètre est présent ou pas, comme par exemple (version 1.x de sdl) avec SDL_BlitSurface()

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Si la structure est assez petite, une copie est plus effective.
    Ces cas doivent être plutôt rare non ?

    Citation Envoyé par Bousk Voir le message
    Si non, en l'absence de référence, il faudra un pointeur. Et dans ce cas il devrait être const.
    +1 pour le const !

    Citation Envoyé par edgarjacobs Voir le message
    Et aussi, le passage par adresse permet de savoir si le paramètre est présent ou pas, comme par exemple (version 1.x de sdl) avec SDL_BlitSurface()
    J'aurais dit que ça a l'inconvénient de devoir gérer le pointeur nul justement (merci les références mais cette notion n'est pas présente en C malheureusement).

  7. #7
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 773
    Par défaut
    Je n'ai pas été complet dans mon commentaire: la description de la fonction prévoit explicitement que le paramètre peut être NULL. Il est évident que les fonctions de string.h ne testent pas si l'argument est NULL ou pas.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/03/2014, 23h10
  2. Réponses: 4
    Dernier message: 08/11/2012, 15h11
  3. structure en paramètre d'une fonction
    Par Tex-Twil dans le forum C
    Réponses: 6
    Dernier message: 29/03/2006, 21h42
  4. Réponses: 9
    Dernier message: 13/05/2005, 03h13
  5. Passer en paramètre d'une fonction (...)
    Par Captain_JS dans le forum C++
    Réponses: 5
    Dernier message: 03/11/2004, 07h18

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