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 :

Optimisation et/ou élégance


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut Optimisation et/ou élégance
    bonjour,

    y a t il une manière plus 'élégante' et/ou plus optimisé pour réaliser ce p'tit programme ; histoire de prendre de bonne habitude dès le début...

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
          1 #include <stdio.h>
          2 #define SIZEMAXTAB 10
          3
          4 void affiche(int t[])
          5 {
          6     int i = 0;
          7     for (; i < SIZEMAXTAB; i++) {
          8       printf("%d\t", t[i]);
          9     }
         10     printf("\n");
         11 }
         12
         13 void swap(int *n1, int *n2)
         14 {
         15     int aux = *n1;
         16     *n1 = *n2;
         17     *n2 = aux;
         18 }
         19
         20 void trie(int t[])
         21 {
         22     int i = 0;
         23     int *pnum1;
         24     int *pnum2;
         25     for (; i < SIZEMAXTAB - 1; i++) {
         26       pnum1 = &t[i];
         27       pnum2 = &t[i + 1];
         28       if (*pnum1 > *pnum2) {
         29         swap(pnum1, pnum2);
         30         trie(t);
         31       }
         32     }
         33 }
         34
         35 int main(void)
         36 {
         37     int tab[SIZEMAXTAB] = { 1, 5, 3, 0, 12, -8, 200, 35, 80, 63 };
         38     int *ptab;
         39     ptab = tab;
         40     affiche(tab);
         41     trie(ptab);
         42     affiche(ptab);
         43     return 0;
         44 }
    merci d'avance...

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Par défaut Re: Optimisation et/ou élégance
    Pour plus d'evolutivite des fonctions, passe plutot la taille des tableaux en paramete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void affiche(int t[], unsigned int taille)
    {
         int i = 0;
         for (; i < taille; i++) {
    (...)
    }
     
    void trie(int t[], unsigned int taille)
    (... correcion idem...)
    De plus, ta fonction trie() est recursive... Si ton tableau est tres grand, et peu trie au depart (style trie dans l'ordre decroissant), alors la recursion va "exploser" et la pile d'appel avec... Le tri a bulle peut se faire en iteratif, c'est pas complique, donc autant le faire, c'est plus sur et meme plus efficace (un appel de fonction fait perdre un peu de temps...).

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut Re: Optimisation et/ou élégance
    Citation Envoyé par jacquesh
    y a t il une manière plus 'élégante' et/ou plus optimisé pour réaliser ce p'tit programme ; histoire de prendre de bonne habitude dès le début...
    Question optimisation, je pense qu'un bon compilateur sera toujours meilleur que toi, par contre pour l'élégance, regarde du côté de IOCCC je trouve ça trés élégant sans rire ce qui compte c'est la lisibilite, voici je que j'aurai fait :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    #include <stdio.h>
     
    /* Parece que je la trouve sympa cette macro! */
    #DEFINE SWAP(type, n1, n2) \
    ({ \
      type aux = n1; \
      n1 = n2; \
      n2 = aux; \
    })
     
    #define SIZEMAXTAB 10
     
    void affiche(int t[])
    {
      int i;
      for (i = 0; i < SIZEMAXTAB; i++)
        printf("%d\t", t[i]);
      printf("\n");
    }
     
    void trie(int t[])
    {
      int i;
      for (i = 0; i < SIZEMAXTAB - 1; i++)
      {
        if (t[i] > t[i+1]) 
        {
          SWAP(int, t[i], t[i+1]);
          trie(t);
        }
      }
    }
     
    int main(void)
    {
      int tab[SIZEMAXTAB] = { 1, 5, 3, 0, 12, -8, 200, 35, 80, 63 };
      affiche(tab);
      trie(tab);
      affiche(tab);
      return 0;
    }
    Voilà

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    #include <stdio.h>
     
     
    #define SIZEMAXTAB 10
     
     
    void affiche (int t[])
    {
       int i = 0;
     
       for (; i < SIZEMAXTAB; i++)
       {
          printf ("%d\t", t[i]);
       }
     
       printf ("\n");
    }
     
     
    void swap (int *n1, int *n2)
    {
       int aux = *n1;
     
       *n1 = *n2;
       *n2 = aux;
    }
     
     
    void trie (int t[])
    {
       int i = 0;
       int *pnum1;
       int *pnum2;
     
     
       for (; i < SIZEMAXTAB - 1; i++)
       {
          pnum1 = &t[i];
          pnum2 = &t[i + 1];
     
          if (*pnum1 > *pnum2)
          {
             swap (pnum1, pnum2);
             trie (t);
          }
       }
    }
     
     
    int main (void)
    {
       int tab[SIZEMAXTAB] = { 1, 5, 3, 0, 12, -8, 200, 35, 80, 63 };
       int *ptab;
     
     
       ptab = tab;
     
       affiche (tab);
       trie (ptab);
       affiche (ptab);
     
     
       return 0;
    }
    Voici pour l'élégance du code donc en somme, bien espacer, le corps ( { et } ) commencent en dessous des conditions et boucles et non pas a coté, la parenthese ouvrante d'une fonction, moi je met un espace entre l'identifiant de la fonction et sa parenthese ouvrante, bien séparer la définition des macros ou constantes symbolique et les inclusions de fichiers d'en-tete. Idem pour la définitions et initialisation des variables locales, bien séparer. Moi je met toujours au minimum lignes blanches entre 2 fonctions.
    Il faut prendre comme bonne habitude également de bien commenter le code, meme si le code ne sort pas de chez toi. le code en sera que plus lisible, surtout si tu ne l'utilise pas pendant un ptit moment.
    Mettre une indentation de 3 espace blancs (enfin dans mon cas) mais attention a ne pas confondre avec des tabulation, je dit bien "espaces"

    Voilà pour l'élégance du code !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Optimisation et/ou élégance
    Citation Envoyé par jacquesh
    y a t il une manière plus 'élégante' et/ou plus optimisé pour réaliser ce p'tit programme ; histoire de prendre de bonne habitude dès le début...
    • Ce code ne compile pas (Le C, c'est pas le BASIC, il n'y a pas de numéros de lignes...)
    • Eviter les tailles de tableaux inutiles pouvant être déterminées automatiquement. Passer les tailles aux fonctions qui en ont besoin. Utiliser l'opérateur sizeof qui est fait pour ça.
    • Eviter les affichages avec tabulation. L'effet n'est pas portable. Utiliser le formatage (ici, "%5d" suffit)
    • Le bubble-sort n'est pas performant. Le langage C fourni qsort() qui est généralement suffisant pour les application courantes. Si on cherche les perfs, utiliser un véritable quick-sort.

    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
    34
    35
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define NELEM(a) (sizeof(a)/sizeof *(a))
     
    static void affiche (int t[], int size)
    {
       int i;
       for (i = 0; i < size; i++)
       {
          printf ("%5d", t[i]);
       }
       printf ("\n");
    }
     
    static int compare (void const *p1, void const *p2)
    {
       int const *n1 = p1;
       int const *n2 = p2;
     
       return *n1 - *n2;
    }
     
    int main (void)
    {
       int tab[] =
       {1, 5, 3, 0, 12, -8, 200, 35, 80, 63};
     
       affiche (tab, NELEM (tab));
       qsort (tab, NELEM (tab), sizeof *tab, compare);
       affiche (tab, NELEM (tab));
     
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        1    5    3    0   12   -8  200   35   80   63
       -8    0    1    3    5   12   35   63   80  200
    Et pour tout le monde, ne pas confondre 'élégance' et 'présentation'...

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Pour l'optimisation, jeter la methode de tri a bulle par la fenetre et la regarder s'ecraser sur le trottoir. Utiliser quicksort ou d'autres methodes plus evoluees (cf Numerical Recipes, section 8).

    Pour l'elegance, je n'aime pas du tout tes boucles for avec l'initialisation deportee sur la ligne du dessus. C'est inutile et destabilisant. Pour une bonne portabilite, la valeur de retour est EXIT_SUCCESS (definit dans stdlib.h)

  7. #7
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut Re: Optimisation et/ou élégance
    Citation Envoyé par alveric
    De plus, ta fonction trie() est recursive... Si ton tableau est tres grand, et peu trie au depart (style trie dans l'ordre decroissant), alors la recursion va "exploser" et la pile d'appel avec...
    Non la taille du tableau n'a rien à voir puisque c'est toujours un pointeur sur celui ci qui est passé. Par contre la pile peu exploser si le nombre d'appel à la fonction est importante, donc si le tableau est particulièrement mal rangé (une simple inversion de deux valeurs peu suffirn tout dépend de l'algo de trie).

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Par défaut Re: Optimisation et/ou élégance
    Citation Envoyé par gege2061
    Citation Envoyé par alveric
    De plus, ta fonction trie() est recursive... Si ton tableau est tres grand, et peu trie au depart (style trie dans l'ordre decroissant), alors la recursion va "exploser" et la pile d'appel avec...
    Non la taille du tableau n'a rien à voir puisque c'est toujours un pointeur sur celui ci qui est passé.
    Merci de ne pas essayer de me contredire en me faisant dire ce que je n'ai pas dit. Je sais tres bien que seul le pointeur vers le debut du tableau sera copie; mais la pile ne peut "exploser" qu'au bout d'un grand nombre de recursions, donc il faut un tableau "un peu grand" pour y arriver. C'est vrai que je n'ai pas trop reflechi au cas le plus defavorable pour son implementation, mais un tableau "un peu mal range" de 10 cases ne devrait pas tout faire peter (quoique... nan, je retire. Mais ca depend de l'algo et de son implementation).
    Citation Envoyé par Dazumba
    Pour l'elegance, je n'aime pas du tout tes boucles for avec l'initialisation deportee sur la ligne du dessus. C'est inutile et destabilisant.
    Ce sont les mots que je cherchais !

    Pour ce qui est du choix du meilleur algo de tri, quicksort est evidemment a preferer, mais j'avais laisse la question de cote, pensant que jaquesh avait eu (aurait du avoir) un cours/bouquin sur les tris qui lui aurait explique tout ca...

    Pour ce qui est des remarques sur la tabulation/les espaces, je suis d'accord; ce qui est de mettre les indentations a 3/4/8/2 espaces, la c'est le choix de chacun. Un outil comme indent est tout a fait conseille pour corriger les erreurs de style qu'on aurait laisse passer.
    Citation Envoyé par Dazumba
    Pour une bonne portabilite, la valeur de retour est EXIT_SUCCESS (definit dans stdlib.h)
    D'apres ce que m'a fait remarquer Emmanuel il n'y a pas si longtemps dans ces memes colonnes, EXIT_SUCCESS faut toujorus zero, donc c'est une question de lisibilite et non de portabilite que de l'utiliser.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Optimisation et/ou élégance
    Citation Envoyé par alveric
    Citation Envoyé par Dazumba
    Pour une bonne portabilite, la valeur de retour est EXIT_SUCCESS (definit dans stdlib.h)
    D'apres ce que m'a fait remarquer Emmanuel il n'y a pas si longtemps dans ces memes colonnes, EXIT_SUCCESS faut toujorus zero, donc c'est une question de lisibilite et non de portabilite que de l'utiliser.
    Je n'ai pas dit ça.

    Les valeurs portables retournées par main() ou passées à exit() sont
    • 0
    • EXIT_SUCCESS
    • EXIT_FAILURE

    La sémantique de 0 et de EXIT_SUCCESS est la même (OK). Ca ne signifie nullement que EXIT_SUCCESS vaut 0.

  10. #10
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    Pour l'elegance, je n'aime pas du tout tes boucles for avec l'initialisation deportee sur la ligne du dessus
    pour ca j'ai pas trop le choix à cause de :
    `for' loop initial declaration used outside C99 mode

    Ce code ne compile pas (Le C, c'est pas le BASIC, il n'y a pas de numéros de lignes...)
    c'était juste pour un point de repert pour le commentaire du forum

    #define NELEM(a) (sizeof(a)/sizeof *(a))
    très pratique je ne savais pas que l'on pouvait rendre un define dynamique

    merci à tous ... tous vos commentaire ont été très formateur

  11. #11
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par jacquesh
    `for' loop initial declaration used outside C99 mode
    ??? Tu essaies sans doute de faire for(int i =0; i<N; i++), qui est valide en C++ mais pas en C (peut etre en C99 en extension?). La bonne forme est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int i;
    for(i=0; i<N; i++)
    {
       ...
    }

  12. #12
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par jacquesh
    Pour l'elegance, je n'aime pas du tout tes boucles for avec l'initialisation deportee sur la ligne du dessus
    pour ca j'ai pas trop le choix à cause de :
    `for' loop initial declaration used outside C99 mode
    Attention il y a une différence entre initialisation et déclaration. Ceci n'est pas permi :
    par contre il vaut mieu écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int i;
    for( i = 0; ... )
    que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int i = 0;
    for( ;... )

  13. #13
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut Re: Optimisation et/ou élégance
    Citation Envoyé par alveric
    Un outil comme indent est tout a fait conseille pour corriger les erreurs de style qu'on aurait laisse passer.
    avant de poster ce code j'avais fair un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    indent -kr monfichier.c

  14. #14
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    Citation Envoyé par gege2061
    Attention il y a une différence entre initialisation et déclaration. Ceci n'est pas permi :
    par contre il vaut mieu écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int i;
    for( i = 0; ... )
    que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int i = 0;
    for( ;... )
    oki - je le saurai pour mes prochaines boucles

  15. #15
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Par défaut Re: Optimisation et/ou élégance
    Citation Envoyé par Emmanuel Delahaye
    Je n'ai pas dit ça.

    Les valeurs portables retournées par main() ou passées à exit() sont
    • 0
    • EXIT_SUCCESS
    • EXIT_FAILURE

    La sémantique de 0 et de EXIT_SUCCESS est la même (OK). Ca ne signifie nullement que EXIT_SUCCESS vaut 0.
    J'arrete pas, ces derniers jours... Ce qui m'a eu, c'est que
    Citation Envoyé par POSIX.1
    The <stdlib.h> header shall define the following macros:

    EXIT_FAILURE
    Unsuccessful termination for exit(); evaluates to a non-zero value.
    EXIT_SUCCESS
    Successful termination for exit(); evaluates to 0.
    Mais c'est une extension, evidemment...

  16. #16
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Par défaut
    Citation Envoyé par DaZumba
    Citation Envoyé par jacquesh
    `for' loop initial declaration used outside C99 mode
    ??? Tu essaies sans doute de faire for(int i =0; i<N; i++), qui est valide en C++ mais pas en C (peut etre en C99 en extension?).
    En C99 aussi, a moins que je ne dise encore une connerie... (en tout cas, GCC en mode C89 le rejete, et l'accepte en mode C99; et c'est d'ailleurs bien ce veut dire le message d'erreur).

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par jacquesh
    #define NELEM(a) (sizeof(a)/sizeof *(a))
    très pratique je ne savais pas que l'on pouvait rendre un define dynamique
    Gni ? Comment ça dynamique ? Une macro opère une sustitution de texte avant la compilation, c'est tout.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Optimisation et/ou élégance
    Citation Envoyé par jacquesh
    Citation Envoyé par alveric
    Un outil comme indent est tout a fait conseille pour corriger les erreurs de style qu'on aurait laisse passer.
    avant de poster ce code j'avais fair un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    indent -kr monfichier.c
    Horrible.

    http://emmanuel-delahaye.developpez....tm#indentation

  19. #19
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par jacquesh
    #define NELEM(a) (sizeof(a)/sizeof *(a))
    très pratique je ne savais pas que l'on pouvait rendre un define dynamique
    Gni ? Comment ça dynamique ? Une macro opère une sustitution de texte avant la compilation, c'est tout.
    je pense qu'il veut dire qu'on peut "passer une variable" à la macro en quelque sorte, je sais que c'est pas du tout le bon therme, mais à mon avis c est un peu ça dans son esprit, qu'il me corrige si je me trompe

  20. #20
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Par défaut
    Horrible, le style K&R ? Bof, ameliorable, je dirais. Ma propre commande (que j'ai pas sous la main) se base sur le style KR avec quelques options en plus pour corriger les trucs qui me plaisent pas...
    En tout cas, je trouve le style KR plus agreable que le GNU... mais les gouts et les couleurs...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Optimisation de votre SGBDR et de vos requêtes...
    Par SQLpro dans le forum Langage SQL
    Réponses: 35
    Dernier message: 11/01/2013, 11h49
  2. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 08h54
  3. [VB6] [BDD] Optimisation de l'accès aux données
    Par LadyArwen dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/01/2003, 13h27
  4. [langage]Problème de temps de lecture, optimisation
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 08/01/2003, 08h47
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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