c en action 2ieme e (extrait du livre)

6
1 Introduction Ce chapitre a pour objet de présenter quelques éléments du langage C. Si vous n'avez pas ou peu de notions de C, nous vous conseillons de le lire de façon linéaire, comme si chaque recette était une leçon. Nous avons gardé la structure du livre basée sur des recettes car outre la cohérence avec le reste de l'ouvrage, cette présentation permet de poser le problème, de donner un résumé de la leçon dans la solution, et de détailler cette solution dans la discussion. Ce chapitre a également pour vocation de rappeler certains points de base à ceux qui veulent se rafraîchir la mémoire, et même de servir de référence en particulier avec les tableaux récapitulatifs de certaines recettes. 2 Écrire son premier programme 2.1 Problème Vous souhaitez écrire votre premier programme ou écrire le squelette de votre prochain programme. 2.2 Solution Recopiez le programme suivant dans votre éditeur de texte et enregistrez-le dans un fichier d'extension .c, par exemple bonjour.c. #include <stdio.h> #include <stdlib.h> int main () { printf ("Bonjour\n"); exit (EXIT_SUCCESS); } 2.3 Discussion Votre premier programme affiche Bonjour. Il est composé des éléments suivants : - le programme principal (printf() et exit()) contenu dans une fonction qui porte toujours le nom main ; - un appel à printf() pour afficher le message Bonjour ; - un appel à exit() pour mettre fin à notre programme ; - l'inclusion de deux fichiers dit d'en-têtes stdio.h et stdlib.h. Ils contiennent entre autres la déclaration des deux fonctions printf() et exit(). C en action 36 © Editions ENI - Toute reproduction interdite

Upload: harris

Post on 31-Dec-2014

19 views

Category:

Documents


2 download

DESCRIPTION

C en Action 2ieme e (Extrait Du Livre)

TRANSCRIPT

Page 1: C en Action 2ieme e (Extrait Du Livre)

1 IntroductionCe chapitre a pour objet de présenter quelques éléments du langage C. Si vous n'avez pas ou peu denotions de C, nous vous conseillons de le lire de façon linéaire, comme si chaque recette était uneleçon. Nous avons gardé la structure du livre basée sur des recettes car outre la cohérence avec lereste de l'ouvrage, cette présentation permet de poser le problème, de donner un résumé de la leçondans la solution, et de détailler cette solution dans la discussion.Ce chapitre a également pour vocation de rappeler certains points de base à ceux qui veulent serafraîchir la mémoire, et même de servir de référence en particulier avec les tableaux récapitulatifs decertaines recettes.

2 Écrire son premier programme

2.1 ProblèmeVous souhaitez écrire votre premier programme ou écrire le squelette de votre prochain programme.

2.2 SolutionRecopiez le programme suivant dans votre éditeur de texte et enregistrez-le dans un fichier d'extension.c, par exemple bonjour.c.

#include <stdio.h>#include <stdlib.h>

intmain (){printf ("Bonjour\n");exit (EXIT_SUCCESS);

}

2.3 DiscussionVotre premier programme affiche Bonjour. Il est composé des éléments suivants :- le programme principal (printf() et exit()) contenu dans une fonction qui porte toujours le

nom main ;- un appel à printf() pour afficher le message Bonjour ;- un appel à exit() pour mettre fin à notre programme ;- l'inclusion de deux fichiers dit d'en-têtes stdio.h et stdlib.h. Ils contiennent entre autres la

déclaration des deux fonctions printf() et exit().

C en action

36 © Editions ENI - Toute reproduction interdite

Page 2: C en Action 2ieme e (Extrait Du Livre)

Ce programme est le premier présenté aux débutants. C'est également la base de tout nouveauprogramme, que vous soyez débutant ou expert. Lorsque vous démarrerez un nouveau projet, nousvous conseillons d'écrire ce programme et de le compiler pour vous assurer dès le début que vos outilsde développement et de compilation sont opérationnels. Pour compiler ce programme, référez-vous à larecette "Compiler un programme" du chapitre "Outils de compilation".

2.3.1 Le programme

Un programme est composé de définitions (généralement fonctions et variables), d'opérations decontrôle (boucles, tests...) et de fonctions. Les opérations de contrôles agissent sur le déroulement duprogramme et en particulier sur des instructions et des blocs d'instructions. Les fonctions permettentquant à elles de regrouper un bloc d'instructions et de lui donner un nom.Vous trouverez également des directives pour le préprocesseur comme le #include pour inclure unfichier dans le code source comme nous l'avons déjà vu ci-dessus, comme les définitions de constan-tes (avec #define ; voyez la recette "Définir et utiliser des constats" à ce sujet) ou comme tout cequi concerne la compilation conditionnelle (voyez la recette "Compiler une section de code en fonctiond'une condition" de ce chapitre).

2.3.2 Les instructions

Une instruction est une action simple comme une opération sur des variables, un appel à une fonctionou une combinaison de ceux-ci. Voici quelques exemples :

a = 1;b = a + 1;c = valeur_max(a+4,b) * 10;reinitialiser(&a);

i =2;x = 3; y=4; z= 5;printf ("Bonjour\n");ma_fonction(argument1,

argument2,argument3);

exit (EXIT_SUCCESS);

Une instruction est toujours terminée par un point-virgule. Par contre, le retour à la ligne après uneinstruction n'a pas d'autre but que d'améliorer la lisibilité. En effet, sauf cas particulier, un retour chariotest considéré comme un espace par le compilateur. La ligne qui précède l'appel à printf() illustrecela en plaçant trois instructions sur la même ligne. De la même façon, nous avons une instructionrépartie sur les deux lignes précédentes. Pour améliorer la lisibilité, les programmeurs mettent généra-lement une ligne par instruction et une instruction par ligne. Néanmoins, lorsqu'une instruction estlongue, il est préférable de la découper comme les trois lignes de l'avant-dernière instruction (appel àma_fonction()). Il faudra alors s'efforcer de bien présenter cette instruction comme nous l'avonsfait ici en alignant les arguments donnés à la fonction.

Bases du langage C

© Editions ENI - Toute reproduction interdite 37

Page 3: C en Action 2ieme e (Extrait Du Livre)

2.3.3 Les blocs d'instructions

Un bloc d'instruction est un ensemble d'instructions encadré par des accolades. Voici deux exemples :

{ a = 1; b = 2; }

{a = 1;b = 2;

}

Les blocs d'instructions servent à exécuter plusieurs instructions à la fois. Cela est souvent nécessairedans le contenu d'une fonction, d'une boucle ou l'action à mener suite à un test positif.

Voir aussi la recette "Compiler un programme" du chapitre "Outils de compilation".

3 Commenter du code

3.1 ProblèmeVous voulez mettre des commentaires dans votre code source ou vous voulez désactiver la compilationde certaines lignes de code.

3.2 SolutionEncadrez vos commentaires ainsi : /* vos commentaires ici */. Dans le cas où vousvoudriez commenter une section de code, faites précéder des lignes de code à désactiver par#ifdef NEPASCOMPILER et terminez cette section de code avec #endif.

3.3 DiscussionCommenter du code peut généralement signifier deux choses très distinctes :- ajouter des commentaires afin d'expliciter le code ;- faire ignorer une section de code au compilateur afin de la désactiver.Le langage C permet d'ajouter des commentaires avec /* et */. Tout ce qui se trouve entre ces deuxséquences sera ignoré par le compilateur. Il est également possible de faire précéder des commentai-res par // et tout ce qui suit sur la ligne sera également ignoré. Les // sont issus des compilateursC++ mais la plupart des compilateurs C les reconnaissent également. Voici quelques exemples :

/* un commentaire sur une ligne */

a = 5; /* un commentaire après du code */

// un commentaire sur une ligne

C en action

38 © Editions ENI - Toute reproduction interdite

Page 4: C en Action 2ieme e (Extrait Du Livre)

a = 5; // tout ce qui suit est ignoré

/* un commentairesur

plusieurs lignesavec une indentation

décorative. */

/* un autre commentaire.* Les étoiles* en début de ligne* sont purement décoratives.*/

Faites attention à ne pas mettre de séquence */ à l'intérieur des commentaires. Cette séquencemarquerait la fin de vos commentaires et la suite n'aurait probablement aucun sens pour le compila-teur. Ne suivez pas l'exemple suivant :

/* un commentaire qui montre ce qu'il ne faut pas faire* avec /* un commentaire à l'intérieur du

* commentaire*/

* ici, le compilateur est perdu */

Dans l'exemple précédent, le commentaire prend fin à la première séquence */. La dernière ligne estdonc considérée comme du code, mais ne veut rien dire en C. Le compilateur vous le fera savoir.Lorsque vous souhaitez commenter du code afin de le désactiver, vous pourriez placer un /* avantcelui-ci et un */ après. Néanmoins, si ce code contenait des commentaires, vous vous retrouveriezdans la situation précédente avec des commentaires à l'intérieur de commentaires. Le plus simple estde détourner un usage de la compilation conditionnelle en mettant une condition de compilation qui nesera jamais remplie. Voici un exemple avec trois lignes à désactiver :

#ifdef NEPASCOMPILERa = 3;/* un commentaire */b = a + 1;#endif

Le code ci-dessus est compilé si la constante NEPASCOMPILER est définie. Ne la définissez pas etle code ne sera pas compilé. Vous pouvez évidemment choisir n'importe quel nom autorisé du momentque vous ne définissez pas la constante.

Voir aussi la recette "Compiler une section de code en fonction d'une condition" de ce chapitre.

Bases du langage C

© Editions ENI - Toute reproduction interdite 39

Page 5: C en Action 2ieme e (Extrait Du Livre)

4 Utiliser des variables et des chaînes de caractères

4.1 ProblèmeVous voulez placer certaines valeurs dans des variables et utiliser celles-ci dans votre programme.

4.2 SolutionDéfinissez des variables avec un type, un nom et une valeur initiale éventuelle.

4.3 DiscussionUne variable se définit d'une des deux façons suivantes en C :

type nom;type nom = valeur_initiale;

Les types de base sont les suivants :

Type Taille en octets Signification

char (unsigned char) 1 caractèreshort (unsigned short) 2 entier courtint (unsigned int) 2, 4 ou 8 entierlong (unsigned long) 4 ou 8 entier longlong long (unsigned long long) 8 entier long sur 64 bits (à partir de

la norme ISO C99)float 4 flottantdouble 8 flottant double précisionlong double 16 flottant quadruple précisionvoid Non applicable absence de type (utilisé par les

fonctions qui ne renvoient pasd'argument)

Les types int et long dépendent du modèle de représentation des données du compilateur, qui estconditionné par votre ordinateur et votre système d'exploitation. Ainsi, sur un ordinateur 32 bits, avecun système d'exploitation 32 bits, les deux types int et long sont de 4 octets. Sur un ordinateur64 bits avec un système d'exploitation 64 bits, le modèle de représentation des données peut varier etvous pouvez avoir 4 ou 8 octets pour ces deux types. Voyez les options de votre compilateur poursavoir comment lui spécifier le modèle de représentation des données à utiliser. Sachant quel'opérateur sizeof indique la taille d'un type, la règle est la suivante :sizeof(short) <= sizeof(int) <= sizeof(long)

C en action

40 © Editions ENI - Toute reproduction interdite

Page 6: C en Action 2ieme e (Extrait Du Livre)

Voici un tableau récapitulatif, dans lequel nous indiquons le nom des divers modèles de représentationdes données, ainsi que la taille des pointeurs (un pointeur est l'adresse d'un emplacement mémoire,souvent celui d'une variable) :

Modèle Taille d'un short Taille d'un int Taille d'un long Taille d'un pointeur

LP32 2 2 4 4ILP32 2 4 4 4LP64 2 4 8 8LLP64 2 4 4 8ILP64 2 8 8 8

Voici quelques exemples :

char caractere = 'b';char age;short temperature = 20;int i;long salaire;double pi = 3.1415926535897932384626433832795029L;

Vous pouvez étendre ces types de bases de plusieurs façons :- Avec un tableau en créant une série de variables de même type, chacune étant accessible par son

rang. Voyez la recette "Définir et utiliser un tableau".- Avec une structure en combinant plusieurs variables (de type similaire ou non) ensembles. Voyez la

recette "Définir et utiliser une structure".- Avec un pointeur en allouant de la mémoire en fonction de vos besoin au cours de l'exécution de

votre programme. Le pointeur sera une référence à ces espaces mémoire ainsi alloués. Voyez larecette "Définir et utiliser un pointeur".

- En définissant de nouveaux types avec typedef.

4.3.1 typedef

L'opérateur typedef s'utilise ainsi :typedef type_existant nom_du_nouveau_type;

L'exemple suivant illustre l'utilisation de typedef. Néanmoins, il est préférable de réserverl'utilisation de cet opérateur à des types plus complexes. En d'autres termes, évitez de redéfinir destypes existants comme dans l'exemple suivant :

typedef short entier_court;

entier_court a = 3;

Voyez plutôt la recette "Définir et utiliser une structure" dans laquelle typedef sert à définir unestructure comme un nouveau type.

Bases du langage C

© Editions ENI - Toute reproduction interdite 41