Aller sur skilly.com

Testez vos compétences et prouvez votre niveau d'expertise

L'œil de Skilly

Toutes les nouveautés High Tech pour les développeurs !

  • Actualités
  • Gourous du Code
  • Événements
  • Just for Fun
  • Quelques Chiffres

Utilisation de variables très locales en C

1
  • par Garf365
  • dans C · Gourous du Code
  • — 2 avr, 2014

Comme tout le monde le sait, et bien que les versions récentes des compilateurs et de la norme C soient plus souples à ce sujet, il faut absolument déclarer ses variables en début de blocs, avant toute instruction. Or, il arrive souvent que l’on ai besoin d’une variable localement au milieu de sa fonction ou de son bloc if. Comme souvent les règles de bonne conduite stipulant que la longueur d’une fonction doit être raisonnable ne sont pas respectées, on se retrouve avec des fonctions de plusieurs centaines de lignes, avec une pléthore de variables utilisées uniquement dans 10 lignes. Outre la surabondance de variables causant une lecture difficile du code et une difficulté supplémentaire pour le maintenir, on se retrouve aussi avec des variables utilisées plusieurs fois dans le code pour différentes choses indépendantes, créant des risques de confusion, d’effets de bord non prévus et donc des risques de dysfonctionnement, de comportements non prévus ou alors un plantage intégral de l’application.

Donc, un petit rappel de la sémantique du C89 et suivant s’impose. Il existe plusieurs types d’instructions dont :

  1. Les « instructions expressions » dont la syntaxe est :
    expression ;
  2. Les « instructions composées » dont la syntaxe est :
    {
        liste-de-declarations(optionnel)
        liste-d'instructions
    }

L’utilité des instructions composées est flagrante avec les instructions de contrôle de flux (if, if…else, for, while, do…while). En effet, en prenant comme exemple l’instruction if…else, dont la syntaxe est if (expression) instruction1 else instruction2, on voit que ces instructions n’exécutent que l’instruction suivante. On se sert donc des instructions composées pour exécuter plusieurs instructions.

On voit donc qu’il est alors possible d’utiliser une instruction composée n’importe où dans le code, notamment lorsque l’on a besoin d’une variable très localement. Voici un exemple :

void AfficherDonnerUtilisateur(Utilisateur *u)
{
    printf("Nom : %s\n", u->nom);
    printf("Prénom : %s\n", u->prenom);

    {
        int i = 0;
        int somme = 0;

        for (i = 0; i < u->nbDonnees1; ++i)
        {
            somme += u->Donnees1[i];
        }

        printf("Moyenne donnée 1 : %.2f", (somme / u->nbDonnees1));
    }

    {
        int i = 0;
        float somme = 0;

        for (i = 0; i < u->nbDonnees2; ++i)
        {
            somme += u->Donnees2[i];
        }

        printf("Somme donnée 2 : %.4f", somme);
    }
}

Fini dès lors les longues listes de déclaration de variables en début de fonction !

Share

Articles liés

  • hibernate search Hibernate Search
  • De l’importance de l’encre De l’importance de l’encre
  • NoSQL VS MySQL Dossier : Quand choisir MySQL ou NoSQL ?
  • Le versionning Dossier : Le versionning au service de développeurs

Répondre à Marc Annuler la réponse.

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

1 Comment

  1. Marc dit :
    12 mai 2014 à 14 h 15 min

    Pour ceux qui ont lu cet article, c’est typiquement le genre de code que vous voulez eviter. Il n’y pas besoin de declarers des variables au milieu d’une function et un bon codeur n’aura jamais une longue liste de variables.

    Le principe de base de programmation est de rester « DRY » (Don’t Repeat Yourself). Le code ci-dessus se repete pour rien.

    « Outre la surabondance de variables causant une lecture difficile du code et une difficulté supplémentaire pour le maintenir ».

    Le code ci-dessus est encore moins lisible qu’une longue liste de variables et bien plus dangeureux. Si d’autres developpeurs travaillent sur ce projet ils n’auraient pu imaginer qu’un « petit malin » s’est amuse a declarer des variables en plein milieu de la fonction.

    « créant des risques de confusion, d’effets de bord non prévus et donc des risques de dysfonctionnement, de comportements non prévus ou alors un plantage intégral de l’application. »

    Ce qui correspond exactement au code presente ci-dessus.

    Si vous voulez voir a quoi un bon code C ressemble, jetez un coup d’oeil sur la source de Quake3. (https://github.com/id-Software/Quake-III-Arena). Vous pourrez voir qu’il doit y’avoir maximum 6 declaration de variables dans une fonction.

    Répondre
  • Article précédent Challenge WordPress – Une mallette de poker à gagner !
  • Article suivant Challenge Drupal – Un chèque cadeau à gagner !
    • Derniers Articles
    • Articles populaires
    • Tags
    • Challenge Node js Fb coverChallenge Node.js – Un chèque cadeau à gagner !20 octobre 2014
    • nodejs-logoNode.js disponible sur Skilly !15 octobre 2014
    • Challenge Ruby On Rails Fb coverChallenge Ruby On Rails – Un chèque cadeau à gagner !6 octobre 2014
    • CSS Week - Challenge de la semaine 15/07C’est la CSS Week !15 juillet 2013
    • CLI : PHP en ligne de commande5 février 2014
    • Reconnaissance faciale PHPReconnaissance faciale en full PHP (+librairie GD)23 juillet 2013
    • 1anDeTests Android Anniversaire ASP.NET C# Challenge Challenges compétence C Sharp CSS Dataviz Drupal Hibernate HTML5 infographie java jQuery linux MongoDB Monster Monster Race Moteur MySQL My SQL Node.js Objective-C PHP recherche Ruby On Rails Sauvegarde Scrum Search Skilly Spring Titanium Windows Server Wordpress
  • Pas encore fan ?

  • Catégories

    • Actualités
    • C
    • Challenges
    • Conférences
    • Événements
    • Gourous du Code
    • Hackathons
    • Hibernate
    • Javascript
    • Just for Fun
    • PHP
    • Quelques Chiffres
    • Skilly Inside
    • Tests de compétences
  • Activité récente

    • Marc dans Utilisation de variables très locales en C
    • Rafflin dans CLI : PHP en ligne de commande
    • Emma dans CLI : PHP en ligne de commande
    • Bernie_liege dans Reconnaissance faciale en full PHP (+librairie GD)
    • Geeko dans C’est la CSS Week !
  • Skilly est un site dédié aux professionnels de l’informatique, qui permet une auto-évaluation objective de son niveau sur une vingtaine de technologies IT.
  • Home
  • Gourous du Code
  • C
  • Utilisation de variables très locales en C
  • Articles récents

    • Challenge Node.js – Un chèque cadeau à gagner !
    • Node.js disponible sur Skilly !
    • Challenge Ruby On Rails – Un chèque cadeau à gagner !
    • Ruby On Rails disponible sur Skilly !
    • Challenge MySQL – Un chèque cadeau à gagner !
  • Allez viens on est bien !

  • Twitter
    Skilly
    Skilly
    @SkillyFR

    @shafan_dev Bonjour Pierre, nous sommes toujours là :) Vous avez constaté un problème sur le site ? Je vous propose d'en parler en DM.

    Répondre Retweeter Favori
    9 h 18 min · 21 avril 2015
    Twitter
    Clever Institut
    Clever Institut
    @CleverInstitut

    Testez vos compétences GIT sur @SkillyFR et participez à notre prochaine formation du 29 et 30 janvier chez @CleverAge

    Répondre Retweeter Favori
    17 h 29 min · 19 janvier 2015 · Retweeté par Skilly
    Twitter
    Shmoolki
    Shmoolki
    @Shmoolki

    Dossier : Quand choisir #MySQL ou #NoSQL ? bit.ly/1Bl8baO MErci @SkillyFR

    Répondre Retweeter Favori
    9 h 52 min · 5 janvier 2015 · Retweeté par Skilly
    Twitter
    Skilly
    Skilly
    @SkillyFR

    L'équipe Skilly vous souhaite de très bonnes fêtes de fin d'année ! :) pic.twitter.com/jop1BxK8nw

    Répondre Retweeter Favori
    15 h 22 min · 24 décembre 2014
    Twitter
    Skilly
    Skilly
    @SkillyFR

    Cette semaine, on parle de Skilly dans @debugroomtv ! Regardez l'émission ici : debugroom.fr/debug-room-21-…

    Répondre Retweeter Favori
    17 h 04 min · 23 décembre 2014
  • Recherche

© COPYRIGHT 2013 L'ŒIL DE SKILLY