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 :

choix entre macro et fonction


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 127
    Points : 88
    Points
    88
    Par défaut choix entre macro et fonction
    Bonjour a tous
    Je poste ce petit prog pour soumettre une question
    pour tester une valeur, dans ce prog, j'ai ecrit une macro pour filtrer une erreur
    Mais ma question est la suivante, est t'il mieux d'ecrire une petite fonction ( ce que j'aurait pu faire dans ce prog, lorque c'est une petite suite d'instruction simple) ou de defnir une macro.
    Merci pour votre aide
    Rémi


    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    /*utiliser une macro ou ecrire une fonction*/
     
    #include<stdio.h>
    #include<conio.h>
     
    #define ERREURMESSAGE {printf("\nDivision par zero interdite,Entree pour continuer");getch();continue;}
     
     
    main()
    {
    	float x,y;    /*x pour le diviseur*/
    	char reply='o';
     
    	while(reply=='o')
    	{
    		printf("\nQuel nombre voulez vous divisez?: ");
    		scanf("%f",&y);
     
    		printf("\nValeur du diviseur?: Division par zero interdite,Entree pour continuer");
    		scanf("%f",&x);
     
    		if(!x)
    			ERREURMESSAGE
     
    		/*si x est egal a zero, la macro stoppe la boucle 
    			   pour eviter une division par zero */
     
    			   printf("\n%.2f divise par %.2f est egale a %.2f",y,x,y/x);
    			   printf("\nAutre calcul?(o/n): ");
    			   reply=getch();
    	}/*fin while*/
     
    }
    [Balises CODE ajoutées par Anomaly - Merci d'y penser vous-même à l'avenir ]

  2. #2
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 88
    Points : 59
    Points
    59
    Par défaut
    D'abord : utilise les balises CODE pour formatter ton code !
    Ensuite :
    Et bien, dans ton cas, il aurait ete complique d'ecrire une fonction qui fait la meme chose.... car une fonction ne peux stoper une boucle d'unefonction appelante (a ma connaissance)

    par contre, tu aurais pu faire la chose suivante :

    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
     
    ...
    while(...)
    {
      ...
      if(sortir(x))
        continue;
    }
    ...
     
    int sortir(int x)
    {
      if(!x)
      {
        printf("\nDivision par zero interdite,Entree pour continuer");
        getch();
        return TRUE;
      }
      return FALSE;
    }
    Ceci dis, si tu a de petites fonctions, tu peux aussi les declarer inline pour eviter d'empiler et de depiler leurs parametres et retours trop souvent....
    "Dis oui à celui qui te dit non, et il te dira peut-être.", Gogoye - Les Proverbes à la Con

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    L'avantage des fonctions c'est que le compilateur verifie le type des paramètres ce qui n'est pas le cas des macros. Autre point à l'avantage des fonctions, c'est que c'est un peu plus facile à débugger (un bug dans une macro c'est souvent galère à retrouver).

    Maintenant à dire que l'un et mieux que l'autre, je crois que c'est plus une question de gout qu'autre chôse, surtout dans le cas ou la macro n'a pas de paramètre.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2
    Points : 2
    Points
    2
    Par défaut macro-fonction
    Un point à souligner quand même.

    Les macros ont souvent l'inconvenient de rendre le code beaucoup moins lisible. De plus elles sont beaucoup plus difficiles a prendre en main, et surtout a debugger car n'ayant pas vraiment de parametre typées, on peut leur passser a peu pres n'importe quoi. Le plus souvent il ya des erreurs de logique avec celles ci.

    Utilise les macros pour de simple test du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define PLUSGRAND(a,b) ((a)>(b)?a:b)
    mais au dela d'une instruction qui peut changer tes variables, prends les fonctions.
    ________//O\\\\______________//O\\\\_________

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Points : 325
    Points
    325
    Par défaut
    Les macros presentent plusieurs interets qui font que quelque fois on n'a pas le choix.

    ceci dit les macros presentes des defauts majeurs : les effets de bords :

    il faut toujours prevoir des perentheses autours des arguemnts a chaque utilisation et autour de la macro elle meme.... ...et ce n'est pas suffisant comme le montre le trop classique exemple appliqué à la macro de TurZ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PLUSGRAND(a++,b)...
    C'est pourquoi l'usage des macros doit etre le plus limité possible...

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

Discussions similaires

  1. [PDO] Choix entre deux fonctions
    Par kate59 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 12/10/2010, 18h35
  2. [AC-2003] Exécuter une macro en fonction d'un choix dans un formulaire
    Par chicabonux dans le forum IHM
    Réponses: 10
    Dernier message: 11/05/2010, 09h23
  3. a href : choix entre OUVRIR ou TELECHARGER
    Par lepierre dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 21/06/2005, 14h51
  4. choix entre dbexpress et objet interbase
    Par hani dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/11/2004, 23h09
  5. Conseille Choix entre MySQL et InterBase?
    Par Redhouane dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/09/2004, 11h42

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