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 :

Probleme code execution


Sujet :

C

  1. #21
    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 Jean-Marc.Bourguet
    Comment justifier qu'on definisse des variables quand on ne peut pas les initialiser avec une valeur pertinante?
    Ca c'est très juste et c'est-ce qui me gonfle avec le Pascal.
    Pas de Wi-Fi à la maison : CPL

  2. #22
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par souviron34
    ce que je voulais dire, c'est que :

    tu fais une fonction qui, par définition, effectue une certaine opération.

    Que tu aies suivi ou non une démarche écrite spec / conception préliminaire / conception détaillée ou que tu le fasses de tête, je ne vois pas comment tu peux (même en pseudo-code) justifier que tu fais :

    je rentre dans la fonction
    je fais une opération
    je déclare un certain nombre de variables
    je fais cette 2ième opération
    je déclare d'autres variables
    etc..

    Que le langage le permette c'est une chose. Que cela soit utilisable c'en est une autre..

    Personellement de toutes façons mon principal argument est la lisibilité (même chose d'ailleurs, sauf cas très spécifiques principalement de debug, pour les variables locales dans des accolades au milieu des routines)

    J'ai eu entre les mains des codes comme ça à intégrer et à sécuriser, ben souvent tu t'arraches les cheveux un bon moment avant de comprendre ce que ça fait, car le problème c'est que souvent c'est l'ensemble des "mauvaises" manières qui sont associées (le problème étant l'utilisation par un hacker et non par quelqu'un ayant une discipline) : include se baladant au milieu du fichier, variables locales statiques, variables globales définies entre routines, commentaires du style " I know it shouldn't work for everything but it works for me", etc.....
    En ce qui me concerne également, le standard de fait en matière de langage C est C90 (mais comme le dit Emmanuel, c'est matière à disucussion). Je déclare donc mes variables en début de bloc lorsque je programme en C. Toutefois, lorsque je programme en C++ où le standard en vigueur autorise plus de liberté au niveau de la déclaration des variables, je préfère définir ces variables juste avant leur utilisation afin de les initialiser à une valeur qui fait sens. De plus, cette manière de faire permet de déclarer les variables dont la valeur n'est pas destinée à être modifiée avec le qualificatif const. Cela ne me choque pas si quelqu'un pratique de la sorte en C99, du moment que cela correspond à ses objectifs de portabilité.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #23
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Ouh là !! j'ai provoqué un tollé....

    Citation Envoyé par Emmanuel Delahaye
    Je fais ça tout le temps dans des blocs selon le principe "la portée d'un objet est réduite au minimum utile". As-tu lu le code ma bibliothèque ? D'après ton expérience, est-ce bizarre, illisible, tordu, illogique, mal conçu ? Ou simplement inhabituel par rapport à ta façon de coder ?
    Je n'ai pas parcouru toute ta lib, mais ce que j'en ai vu ne m'a pas présenté de telle utilisation...

    Mais si ça existe, je persiste à dire que c'est plus difficilement lisible... (et portable vers un autre langage. Mais il faut dire que mon expérience est avec des progammeurs/utilisateurs scientifiques, et que en gros les portages sont entre C, Fortran, Prolog, et Pascal)

    Citation Envoyé par médinoc
    Pour justifier des variables hors début de bloc, je ne dirais qu'un mot : const
    C'est une implémentation. Je ne vois pas en quoi c'est une justification.

    Citation Envoyé par Jean-Marc.Bourguet
    Comment justifier qu'on définisse des variables quand on ne peut pas les initialiser avec une valeur pertinente?
    Quand dans une spécification fonctionnelle tu définis une interface de fonction, tu te fous pas mal de l'initialisation. Tu sais simplement que tu auras besoin de telle et telle variable.

    Il me semble donc logique que lorsque je rentre dans une fonction, je sache que je vais avoir à utiliser l'ensemble de ces variables.
    Quand je vais construire une pièce dans une maison, je préfère réfléchir un bon coup avant, calculer, et aller acheter en une seule fois le sable, le ciment, les briques, le plâtre, dans les quantités dont j'aurais besoin, parce que ça fait partie de la conception de la pièce, plutôt que d'y aller au coup par coup, parce qu'au milieu d'un mur j'ai plus de ciment ou plus de briques..

    Et enfin je n'ai jamais dit que ce n'était pas faisable, juste que je ne trouve pas ça très lisible en C. Que cela se fasse en C++, aucun problème.

    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  4. #24
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut Merci
    Merci a tous

  5. #25
    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 souviron34
    Je n'ai pas parcouru toute ta lib, mais ce que j'en ai vu ne m'a pas présenté de telle utilisation...
    Par exemple, pour rester dans des domaines connus...

    http://emmanuel-delahaye.developpez....ib/ed/src/io.c
    Mais si ça existe, je persiste à dire que c'est plus difficilement lisible... (et portable vers un autre langage. Mais il faut dire que mon expérience est avec des progammeurs/utilisateurs scientifiques, et que en gros les portages sont entre C, Fortran, Prolog, et Pascal)
    Ou la, si il faut commencer à écrire du code compatible avec les autres langages, on a pas fini. Heureusement, il existe des passerelles qui permettent de mélanger des fichiers objets écrits en différents langages, ce qui rend cette manip inutile...

    Quand on fait une DLL en C, on se fout pas mal de savoir si les fonctions vont être appelées en C, en Java , en assembleur ou en Haskell (je ne sais pas ce que c'est mais, ça fait savant...)...

    Par contre, on a scrupuleusement respecté les règles qui permettent de générer une ABI correcte et compatible, et l'usage des flottants et autres chaines est strictement documenté.
    Quand dans une spécification fonctionnelle tu définis une interface de fonction, tu te fous pas mal de l'initialisation. Tu sais simplement que tu auras besoin de telle et telle variable.
    Il n'y a absolument aucun rapport entre l'interface et les variables locales et leur éventuelle initialisation.

    Une variable locale, ça fait un travail le plus local possible. En principe, je déclare, je définis et j'initialise en une fois, et la variable est détruite en fin de bloc.

    Je ne vois pas ce que ça a d'illisible, au contraire. Les variables locales sont plus(plusse) liées à des contraintes d'implémentation qu'à une signification fonctionnelle précise (sauf valeur de retour). D'ailleurs, la variable qui contient la valeur de retour est généralement définie en première ligne de la fonction. Logigue...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int f (...)
    {
       int ret = 0;
     
       /* n'importe quoi qui peut éventuellement altérer ret. */
     
       return ret;
    }
    Pas de Wi-Fi à la maison : CPL

  6. #26
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par souviron34
    C'est une implémentation. Je ne vois pas en quoi c'est une justification.
    1. Marquer en début de bloc ou non, c'est de l'implémentation.
    2. Const est une justification car il y a des variables qu'on ne peut pas initialiser au début d'un bloc. Et une variable const ne peut être qu'initialisée.
      Donc, il y a des variables qui ne sont affectées qu'une seule fois dans toute leur portée et qui ne peuvent être const que si elles ne sont pas déclarées en début de bloc.
    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. #27
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par souviron34
    Quand dans une spécification fonctionnelle tu définis une interface de fonction, tu te fous pas mal de l'initialisation.
    De l'initialisation de quoi? Tu ne me parles que d'interface ici, alors que le sujet sont les variables de bloc qui n'apparaissent pas a ce stade de spécification chez moi.

    Tu sais simplement que tu auras besoin de telle et telle variable.
    Non. A la rigueur tu as une idee d'un sous-ensemble des variables que tu vas utiliser, mais tu ne les connais pas toutes. Et ca n'apparait pas dans la spec qui n'atteint pas ce niveau de description.

    Il me semble donc logique que lorsque je rentre dans une fonction, je sache que je vais avoir à utiliser l'ensemble de ces variables.
    Quand je vais construire une pièce dans une maison, je préfère réfléchir un bon coup avant, calculer, et aller acheter en une seule fois le sable, le ciment, les briques, le plâtre, dans les quantités dont j'aurais besoin, parce que ça fait partie de la conception de la pièce, plutôt que d'y aller au coup par coup, parce qu'au milieu d'un mur j'ai plus de ciment ou plus de briques..
    Pour autant que l'analogie vaille quelque chose, les variables me semblent plus correspondre aux outils qu'aux materiaux. Et quand je demande a un macon de me contruire un mur, je ne lui indique pas que je veux qu'il utilise deux truelles, un fil a plomb et une betonniere -- immobilise celle-ci tant qu'il est toujours dans la phase de demolition n'est d'ailleurs pas tres sense. Et s'il a un aide qui vient temporairement et qu'il y a une truelle de plus, ca n'a pas d'importance pour moi tant que les specs du mur sont respectees et qu'il n'oublie pas le ferraillage qu'il a facture :-)

    Et enfin je n'ai jamais dit que ce n'était pas faisable, juste que je ne trouve pas ça très lisible en C.
    En C j'ai le probleme de la portabilite. J'utilise encore des compilateurs C90. Introduire des blocs est un plus lourd et on se retrouve devant des choix ou parfois introduire un bloc est mieux, parfois declare la variable sans pouvoir l'initialise est mieux.

    De toute facon, s'il y a une grosse difference de lisibilite, c'est signe qu'il faut regarder s'il ne faut pas decouper le bloc. Et quand on le fait, avoir les variables plus localisees aide a la decoupe.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  8. #28
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Ensuite, le fait que je préfère que le type soit déclaré en début de bloc est une affaire personnelle et liée à la portabilité (pour moi, le standard de fait, c'est C90, mais les avis divergent sur ce point).
    Je partage ta preference car :
    * C'est davantage portable.
    * Il plus facile de voir a quel bloc la variable appartient et donc le code est davantage lisible.
    * ll est generalement plus long de trouver une instruction au milieu de declaration de variable (enin pour moi).
    * En outre, sauf cas particulier, je ne vois pas le gain apporte par la declaration de variables apres des instructions[1].

    Selon ces criteres, je trouveque l'organisation du code utilise par le PO dans le message incrimine ne correspond a de "bonnes habitudes de programmations" (c'est un avis certes assez subjectif).

    Dans le meme registre, je reprocherais au code du PO l'utilisation de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double valeur1, valeur2;
    Je trouve assez peu lisible de declarer deux varaibles sur la meme ligne, mais la encore ca reste une question de gout.

    Citation Envoyé par Médinoc
    Pour justifier des variables hors début de bloc, je ne dirais qu'un mot : const.
    Comme pour toute regle, il y a des exceptions[2].




    [1] Hors instructions utilisees pour intialiser des variables. En clair
    ne me gene pas. Par contre, je ne vois pas ce qu'apporte l'ecriture
    [2] D'ailleurs, a mon humble avis, la premiere regle de tout documents "regles de programmation" devrait specifier que toutes les regles qui suivent peuvent, si il existe une bonne raison et que c'est correctement documente, etre enfreinte.

  9. #29
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par gl
    [2] D'ailleurs, a mon humble avis, la premiere regle de tout documents "regles de programmation" devrait specifier que toutes les regles qui suivent peuvent, si il existe une bonne raison et que c'est correctement documente, etre enfreinte.


    100% d'accord.. Et c'est d'ailleurs vrai aussi pour les normes....
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  10. #30
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    [...] Mais dans d'autres langages, au contraire (BASIC, Python, Ruby etc.), il n'y a pas de définition préalable. C'est le type de la partie droite de l'affectation qui détermine le type de l'objet crée (typage dynamique).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       i := 2        ; creation d'un entier
       j := 1.2     ; creation d'un reel.
       k := "hello" ; creation d'une chaine etc.
    évidemment, la lecture d'une variable n'ayant jamais été affectée (donc créée) entraine une erreur d'exécution (variable inconnue).
    Pas avec tous les langages.
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  11. #31
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par David.Schris
    Pas avec tous les langages.
    Tu peux citer des exemples???

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  12. #32
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par mujigka
    Tu peux citer des exemples???
    Au moins BASIC, Perl
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  13. #33
    Membre habitué Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Points : 185
    Points
    185
    Par défaut
    Personnellement je prefere la méthode C99/C++.
    Je trouve que déclarer en début de code, en plus du probleme d'initialisation deja évoqué, ca obscurcit les déclarations. En effet, on se retrouve a faire des déclarations de variables "facultatives/sans véritable sens" (notez les guillemets) et on est obligé de compenser en rajoutant des commentaires.

    Exemple :

    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
     
    int mafonction()
    {
    /*Iterateurs pour les boucles for imbriquées*/
    int i;
    int j;
    /*variable temporaire de traitement dans la boucle for*/
    char temp;
    /*Variables vraiment utiles*/
    //declaration des variables ayant de véritables informations
    //tout un tas de lignes de code
    ...
    for(i;i<max;i++)
    {
       for(j;j<max;j++)
       {
        ...
       }
    }
    }
    au lieu de :

    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
     
    int mafonction()
    {
    //declaration des variables ayant de véritables informations
    //tout un tas de lignes de code
    ...
     
    for(int i = 0;i<max;i++)
    {
       for(int j = 0;j<max;j++)
       {
        char temp;
       }
    }
    }
    De plus, on doit sans cesse se referer au début des fonctions lorsqu'on recherche le nom/type d'une variable meme si elle n'est utile que dans un sous-bloc.

  14. #34
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Ksempac
    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
     
    int mafonction()
    {
    //declaration des variables ayant de véritables informations
    //tout un tas de lignes de code
    ...
     
    for(int i = 0;i<max;i++)
    {
       for(int j = 0;j<max;j++)
       {
        char temp;
       }
    }
    }
    De plus, on doit sans cesse se referer au début des fonctions lorsqu'on recherche le nom/type d'une variable meme si elle n'est utile que dans un sous-bloc.
    On est d'accord, mais cette syntaxe de la structure de contrôle for n'est pas supportée par tous les compilateurs, en particulier ceux qui n'implantent pas ou de manière incomplète la nouvelle norme du langage (C99).

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  15. #35
    Membre habitué Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Points : 185
    Points
    185
    Par défaut
    Si cette boucle for n'est pas prise en charge, on peut aussi utiliser cette syntaxe, qui est tout aussi claire :

    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
    int mafonction()
    {
    //declaration des variables ayant de véritables informations
    //tout un tas de lignes de code
    ...
    int i;
    for(i = 0;i<max;i++)
    {
        int j;
        for(j=0;j<max;j++)
        {
        char temp;
        ...
        }
     
    }
    Inutile de rajouter un commentaire pour expliquer le but de i et j, et les déclarations des variables utiles (en début de bloc beaucoup plus haut) n'ont pas été "polluées".

  16. #36
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Au moins BASIC, Perl
    Merci! J'avais mal saisit à quoi se rapportait la remarque de David.Schris (erreur d'exécution)

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  17. #37
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Ksempac
    On peut aussi utiliser cette syntaxe, qui est tout aussi claire :

    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
     
    int mafonction()
    {
    //declaration des variables ayant de véritables informations
    //tout un tas de lignes de code
    ...
    int i;
    for(i = 0;i<max;i++)
    {
        int j;
        for(j=0;j<max;j++)
        {
        char temp;
        ...
        }
     
    }
    Inutile de rajouter un commentaire pour expliquer le but de i et j, et les déclarations des variables utiles (en début de bloc beaucoup plus haut) n'ont pas été "polluées".
    et tout aussi peu portable... Mais suis d'accord que suivant les objectifs de portabilitérecherchés, cette pratique est recommendable et rend le code plus lisible.

    Dans ce cas, je préfère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {
        int i;
        for(i = 0;i<max;i++)
        {
            int j;
            for(j=0;j<max;j++)
            {
                char temp;
                ...
            }
        }
    }
    Mais je déclare en général mes compteurs de boucles en début de routine lorsque je me limite à C90.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  18. #38
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    mais je rajouterais un clin d'oeil .... parce que je n'ai jamais utilisé....

    Si tu as besoin de plusieurs fois ce i (c'est à dire tu as plusieurs bloucles séparées par du code), comment ça se passe ? tu re-déclares à chaque fois ? ça doit augmenter la taille de la routine alors non ??
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  19. #39
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par souviron34
    mais je rajouterais un clin d'oeil .... parce que je n'ai jamais utilisé....

    Si tu as besoin de plusieurs fois ce i (c'est à dire tu as plusieurs bloucles séparées par du code), comment ça se passe ? tu re-déclares à chaque fois ? ça doit augmenter la taille de la routine alors non ??
    pourquoi?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  20. #40
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mujigka
    pourquoi?

    Thierry
    je pose la question. Si tu déclares dans une boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for ( int i = 0 ....)
    Est-ce que cette déclaration est valable plus loin (à l'extérieur de la boucle) ?
    Et sinon, si j'ai bsoin d'une autre boucle plus loin et que je re-fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for ( int i = 0 ....)
    Est-ce que ça ne me prend pas 2 int dans la fonction ???
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [AC-2007] probleme d'execution de code vba
    Par adem_dev dans le forum IHM
    Réponses: 5
    Dernier message: 14/11/2009, 13h14
  2. probleme d'execution de mon code à cause d'un renvoie de variable.
    Par yorukaze dans le forum Général Python
    Réponses: 2
    Dernier message: 01/03/2008, 15h36
  3. Probleme pour executer java.exe depuis le code !
    Par Battosaiii dans le forum C#
    Réponses: 1
    Dernier message: 21/11/2007, 12h55
  4. Probleme d'execution du code java
    Par betacrack dans le forum Langage
    Réponses: 3
    Dernier message: 07/09/2006, 11h40
  5. probleme code vba ne s'execute pas apres instruction sql
    Par arnogef dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 29/12/2005, 12h34

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