Previous Next Contents




C-VI : sommaire

C-VI  1


Expressions et Opérateurs (suite)

  1. Conversion de type
  2. Opérateur de portée

C-VI  2


Conversion de type



C-VI  3


Opérateur de portée

#include <iostream.h>
int b = 8;
int main(void) { // local à main
   cout << "Avant déf. : b=" << b ;
   char * b = "no";
   cout << "après : b=" << b;
   cout << " ::b=" << ::b << endl;
   { // local au bloc dans main
      cout << "Bloc avant : b=" << b;
      char * b = "ok";
      cout << " après : b=" << b;
      cout << " ::b=" << ::b << endl;
   }
   cout << "Hors bloc : b=" << b << endl;
   return 0;
}
//Avant déf. : b=8 après : b=no ::b=8
//Bloc avant : b=no après : b=ok ::b=8
//Hors bloc : b=no


C-VI  4


Déclaration (suite)
  1. Effets des déclarations
  2. Variables externes

C-VI  5


Effet des déclarations

Trois aspects à prendre en compte...
Visibilité ou portée (anglais : scope):
 
détermine les parties du programme capables d'accéder à un identificateur (variable ou fonction);
Initialisation :
 
détermine le contenu initial (pour les variables).
Durée de vie (anglais : extent):
 
détermine à quel moment la mémoire correspondante est allouée et est libérée;

C-VI  6


Effet par défaut des déclarations
Fonction
 
° visibilité : de la déclaration à la fin du fichier; Accessible dans d'autres modules avec extern SAUF si déclarée en static;
° durée de vie : programme.
Variable dans un bloc
 
° visibilité : de la déclaration à la fin du bloc;
° initialisation : aucune par défaut;
° durée de vie : bloc (auto).
Variable globale
 
° visibilité : de la déclaration à la fin du fichier; Accessible dans d'autres modules avec extern SAUF si déclarée en static;
° initialisation : 0 par défaut (MAIS ne pas compter dessus) ;
° durée de vie : programme.

C-VI  7


Déclaration de variables externes

But : déclarer une variable ou une fonction définie dans un autre fichier... (on dira aussi ``importer'').

Remarques :
- Possible pour les fonctions non définies en static;
- Possible pour les variables globales non définies en static.



--> Application: les fichiers d'en-tête...


C-VI  8





Exemple de liaison interne/externe

C-VI  9


Pré-processeur


C-VI  10


Définition de constantes

#define  TRUE    1
#define  FALSE   0

#define  PI      3.141592




Remarque : moins utile depuis l'introduction (récente) de véritables constantes en C et en C++.


Remarque : symboles pré-définis sur SparcStations :
unix sparc sun ...


C-VI  11


Définition de macros

#define  carre(x)      ((x)*(x))

#define  moyenne(a,b)  (((a)+(b))/2)

#define  max(a,b)      (((a)>(b))?(a):(b))
   .
   .
   .
int i, j, k=10;

i=carre(k);
j=carre(k++);



Attention : comparer avec l'appel d'une fonction...
que valent j et k après :     j=carre(k++);


C-VI  12


Compilation conditionnelle

#if DEBUG
  /* code inclus ssi DEBUG est != 0 */
  fprintf(stderr, ...);
#endif


#ifdef IBM
  ...  /* code spécifique à l'IBM */
#else
  ...  /* cas général */
#endif


#ifndef pile_h
#define pile_h
  .
  .     /* Placer ici le contenu de pile.h */
  .
#endif

C-VI  13


Inclusion de fichiers en-tête

#include "titi.h"
#ifdef UNIX
#include "../toto.h"
#include "/home/coltrane/projet/toto.h"
#else
#include "..\toto.h"
#include "\home\coltrane\projet\toto.h"
#endif
#include <stdio.h>
#include <mon-fichier.h>



Remarque : Le compilateur interdit de redéfinir une constante ou une macro dans un même fichier --> attention en incluant plus d'une fois un même fichier d'en-tête.


C-VI  14


Exemple de fichier d'en-tête
Le fichier /usr/include/stdio.h  (extraits) :


// Prévention des inclusions multiples
#ifndef _STDIO_H
#define _STDIO_H
// Noter l'absence de ';' car ce n'est pas
// une instruction
#define EOF (-1)
typedef unsigned int size_t;
extern int fclose(FILE *);
extern FILE *fopen( const char *,
   const char *);
extern int fprintf(FILE *,
   const char *,
    ...);
...
#endif // _STDIO_H




C-VI  15


Entrées/Sorties (suite)
  1. E/S sur fichiers en C.

C-VI  16


E/S en C : Ouverture/Fermeture de fichiers


C-VI  17


E/S en C : E/S sur fichiers






Previous Next Contents