Beruflich Dokumente
Kultur Dokumente
- p. 1/81
Présentation du cours
introduction ■
● Présentation du cours
● Introduction
● Rappels d’architecture
■ Enseignants:
● Rappels d’architecture ◆ Cours 24h: Tanguy Risset, Stéphane Ubeda
● Compilation
● logiciel ◆ TD 30:
Les bases du C ◆ TP 28h
Les fonctions ■ Déroulement du cours:
Les entrées-sorties ◆ Principes de la programmation en C
Introduction ◆ Principes de l’algorithmique
Pointeur de fonctions ◆ Notions de recherche opérationnelle
Erreurs courante en C
- p. 2/81
Références utiles
introduction
● Présentation du cours
■ livres:
● Introduction ◆ Le langage C, Kernighan & Ritchie, Masson, 1990
● Rappels d’architecture
● Rappels d’architecture la référence pour la programmation en C ANSI
● Compilation
● logiciel ◆ Introduction à l’algorithmique, T. Cormen, C. Leiserson, R.
Les bases du C Rivest, 1994, Dunod
Les fonctions Approche complète et pédagogique de l’algorithmique
Les entrées-sorties ■ Sur le web
Introduction ◆ Poly de Bernard Cassagne (votre poly):
Pointeur de fonctions http://www-clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C.htm
Erreurs courante en C ◆ C reference manual (version épurée du Kernighan &
Ritchie avec grammaire du langage):
http://cm.bell-labs.com/cm/cs/who/dmr/cman.pdf
◆ C library reference guide:
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/
◆ Cours d’Anne Canteaut (beaucoup utilisé dans ces
transparents)
http://www-rocq.inria.fr/codes/Anne.Canteaut/COURS_C/
- p. 3/81
Introduction
introduction
● Présentation du cours
■ Historique
● Introduction ◆ Créé par Dennis Ritchie pour écrire Unix pour le PDP -11
● Rappels d’architecture
● Rappels d’architecture (publication 1978)
● Compilation
● logiciel ◆ Standard ANSI C (1990)
Les bases du C ■ Pourquoi C?
Les fonctions ◆ Avantages
Les entrées-sorties ■ Performance
Introduction (http://shootout.alioth.debian.org),
Pointeur de fonctions portabilité, standard, proche de la machine
Erreurs courante en C ■ Permet de comprendre les mécanismes de l’exécution
introduction
● Présentation du cours
■ Un ordinateur de bureau est composé (au moins):
● Introduction ◆ D’un processeur
● Rappels d’architecture
● Rappels d’architecture ◆ D’une mémoire (dite vive: rapide et non rémanente)
● Compilation
● logiciel ◆ D’un espace de stockage (disque dur: lent, rémanent)
Les bases du C ◆ De périphériques d’entrée/sortie (écran, claviers, etc.)
Les fonctions ■ Principe du processeur programmable:
Les entrées-sorties ◆ Le processeur lit un programme en mémoire (programme
Introduction exécutable, dépendant du type de processeur).
Pointeur de fonctions ◆ En fonction de ce programme
Erreurs courante en C ■ Il lit ou écrit des données en mémoire à une certaine
- p. 5/81
Rappels d’architecture
introduction 7fffffffhex
● Présentation du cours
● Introduction
Stack seg
● Rappels d’architecture
● Rappels d’architecture
● Compilation
● logiciel
Interrupts
Processor
Les bases du C
Les fonctions
Cache
Les entrées-sorties
Dynamic data
Memory–I/O bus Data segm
Introduction
Static data
Pointeur de fonctions I/O I/O I/O 10000000hex
Main controller controller controller
Erreurs courante en C
memory Text segm
Disk Disk Graphics Network 400000hex
output Reserved
- p. 6/81
Architecture vue du programmeur
introduction
● Présentation du cours
■ Les systèmes modernes permettent
● Introduction ◆ D’exécuter plusieurs programmes indépendant en
● Rappels d’architecture
● Rappels d’architecture parallèle (processus)
● Compilation
● logiciel ◆ D’accéder à un espace mémoire plus grand que la
Les bases du C mémoire physique disponible (mémoire virtuelle)
Les fonctions ■ Pour le programmeur: tout cela est transparent
Les entrées-sorties ◆ Un seul programme s’exécute avec une mémoire très
Introduction grande disponible
Pointeur de fonctions
■ La mémoire vue du processeur contient:
Erreurs courante en C
◆ Le code à exécuter
◆ Les données statiques (taille connue à la compilation)
◆ Les données dynamiques (taille connues à l”exécution: le
tas, et l’espace necessaire à l’exécution elle-meme: la
pile)
■ Le programmeur lui ne voit que les données (statiques et
dynamiques)
- p. 7/81
Processus de compilation
introduction
● Présentation du cours
■ le processus complet va traduire un programme C en code
● Introduction
● Rappels d’architecture
exécutable (le chargement et l’exécution auront lieu plus
● Rappels d’architecture tard).
● Compilation
● logiciel code asm obj
compilateur assembleur
.c .s .o
Les bases du C
Les fonctions
lib
édition des
Les entrées-sorties .a liens
Introduction
Exécution
Pointeur de fonctions chargement exe
Simulation
Erreurs courante en C
- p. 8/81
Votre processus de compilation
introduction
● Présentation du cours
■ Le programmeur:
● Introduction ◆ Écrit le programme C: ici le dans le fichier ex.c
● Rappels d’architecture
● Rappels d’architecture ◆ Compile vers un programme objet ex.o
● Compilation
● logiciel ◆ Fait l’édition de lien pour générer l’executable ex
Les bases du C
contenu de ex.c
Les fonctions
ex.c ex.o
Les entrées-sorties
gcc −c ex.c
Introduction
Pointeur de fonctions
stdio.h libstdio.a
gcc ex.o −o ex
Erreurs courante en C
ex
gcc ex.c −o ex
- p. 9/81
Dénomination à retenir
introduction
● Présentation du cours
■ Le programme C que vous écrivez est le programme source
● Introduction
● Rappels d’architecture
(ex.c)
● Rappels d’architecture
■ Le programme source est compilé en un programme objet
● Compilation
● logiciel
par le compilateur (ex.o)
Les bases du C
■ Le programme source inclut un fichier d’en-tete (stdio.h)
Les fonctions
pour vérifier les noms des fonctions externes utilisées
Les entrées-sorties
(printf)
Introduction
■ le programme executable est construit par l’éditeur de liens
Pointeur de fonctions
grâce au programme objet et aux bibliothèques.
Erreurs courante en C
■ Les bibliothèques (library en ex.o
ex.c
gcc −c ex.c
anglais) sont des codes
assembleurs (i.e. déjà compilés) de
stdio.h
fonctions fréquements utilisées. Ici libstdio.a
gcc ex.o −o e
- p. 10/81
Notions de génie logiciel
introduction
● Présentation du cours
■ Pour développer une application, on parle de logiciel plutôt
● Introduction
● Rappels d’architecture
que de programme
● Rappels d’architecture
● Compilation
■ Un logiciel est plus qu’un programme
● logiciel
■ Le cycle de vie du logiciel inclut:
Les bases du C
◆ L’analyse du problème à résoudre
Les fonctions
◆ La conception d’une solution (spécification)
Les entrées-sorties
◆ Le développement de la solution (programme)
Introduction
◆ Le test du programme
Pointeur de fonctions
◆ La livraison avec documentation associée
Erreurs courante en C
◆ La maintenance
- p. 11/81
introduction
● Présentation du cours
■ Méthodes
● Introduction ◆ Réfléchir avant d’agir !
● Rappels d’architecture
● Rappels d’architecture ◆ règles de développement (Merise, programmation par
● Compilation
● logiciel test)
Les bases du C ◆ Language objet: C++, Java
Les fonctions ■ Outils
Les entrées-sorties ◆ Gestionnaire de compilation : make
Introduction ◆ Debugger : gbd, ddd, ....
Pointeur de fonctions ◆ Environnements de développement (intègrent tout):
Erreurs courante en C eclipse, VisualC++
- p. 12/81
Les bases du C
Erreurs courante en C
■ Exemple: le tri d’un tableau d’entier
- p. 13/81
Syntaxe
introduction ■ Une expression est une suite de composants élémentaires syntaxiquement correcte,
Les bases du C par exemple: x = 0 ou bien
● Syntaxe (i >= 0) && (i < 10)
● types de base
● Les opérateurs ■ En C chaque expression produit:
● Types construits
◆ une action (modification possible de l’état des variables en mémoire)
● Les tableaux
● chaînes de caractères ◆ un résultat (valeur renvoyée par l’expression)
● contrôle de flot
■ Une instruction est une expression suivie d’un point-virgule. Le point-virgule signifie en
Les fonctions
quelque sorte “évaluer cette expression et oublier le resultat”.
Les entrées-sorties ■ Plusieurs instructions peuvent être rassemblées par des accolades { et } pour former
Introduction une instruction composée (ou bloc) qui est syntaxiquement équivalent à une
instruction. Par exemple,
Pointeur de fonctions
if (x != 0)
Erreurs courante en C
{
z = y / x;
t = y % x;
}
- p. 15/81
Les fonctions
int main()
Les entrées-sorties
{ déclarations de variables internes
Introduction
instructions
Pointeur de fonctions
}
Erreurs courante en C
- p. 16/81
Variables
Les fonctions
l’exécution du programme
◆ Une variable possède un type qui caractérise l’ensemble
Les entrées-sorties
Introduction
des valeurs qu’elle peut prendre
Pointeur de fonctions
■ Du point de vue pratique, une variable est une manière
Erreurs courante en C
mnémotechnique pour désigner une partie de la mémoire.
■ En C les noms des variables sont composés de la manière
suivante:
une suite de caractères parmis :
◆ les lettres (minuscules ou majuscules, mais non
accentuées),
◆ les chiffres (sauf en début de nom),
◆ le “blanc souligné” (_).
- p. 17/81
Types de base en C
Pointeur de fonctions
■ Une instruction composée d’un spécificateur de type et
Erreurs courante en C
d’une liste d’identificateurs éventuellement initialisés séparés
par une virgule est une déclaration. Par exemple:
int a;
int b = 1, c;
double x = 2.38e4;
char message[80];
■ Il existe de nombreuses conversions de types implicites
- p. 18/81
Représentation de l’information
- p. 19/81
- p. 20/81
Les types entier
Pointeur de fonctions
■ Le fonction sizeof calcul la taille d’un type ou d’une
Erreurs courante en C
expression. Le résultat est un entier égal au nombre d’octets
nécessaires pour stocker le type ou l’objet. Par exemple
ci-dessous taille prendra la valeur 2 les deux fois
unsigned short x;
taille = sizeof(unsigned short);
taille = sizeof(x);
- p. 21/81
introduction
mot-clef taille DEC Alpha Taille PC Intel
Les bases du C
● Syntaxe float 32 bits 32 bits flottant
● types de base
● Les opérateurs double 64 bits 64 bits flottant double précision
● Types construits
● Les tableaux long double 64 bits 128 bits flottant quadruple précision
● chaînes de caractères
● contrôle de flot
■ Les flottants sont généralement stockés en mémoire sous la
Les fonctions
Les entrées-sorties
représentation de la virgule flottante normalisée. On écrit le nombre
Introduction
sous la forme
Pointeur de fonctions signe 0, mantisse B exposant
Erreurs courante en C (12, 3 ⇔ 0.123 ∗ 102 ). En général, B=2. Le digit de poids fort de la
mantisse n’est jamais nul.
■ Par exemple dans le standard EE754, en simple précision ( 32 bits):
s igne Mantisse Exposant
1bit 8 bits 23 bits
- p. 22/81
Les caractères
introduction ■ Un char peut contenir n’importe quel élément du jeu de caractères de la machine
Les bases du C utilisée.
● Syntaxe
■ un char est codé sur un octet ;
● types de base
● Les opérateurs ■ Le jeu de caractères utilisé correspond généralement au codage ASCII (sur 7 bits).
● Types construits
● Les tableaux ■ La plupart des machines utilisent désormais le jeu de caractères ISO-8859-1 (aussi
● chaînes de caractères
● contrôle de flot
appelée ISO-LATIN-1) dont les 128 premiers caractères correspondent aux caractères
ASCII.
Les fonctions
■ extrait de la table ASCII:
Les entrées-sorties
caractère valeur valeur · caractère valeur valeur
Introduction
Pointeur de fonctions
représenté (dec) (hex) représenté (dec) (hex)
Erreurs courante en C ! 33 21hex A 65 41hex
" 34 22hex B 66 42hex
# 35 23hex C 67 43hex
... ... ... ... ... ...
0 48 30hex a 97 61hex
1 49 31hex b 98 62hex
2 50 32hex ... ... ...
- p. 23/81
Les constantes
- p. 25/81
Les opérateurs
- p. 26/81
Règles de priorité des opérateurs
- p. 27/81
Types construits
introduction
■ À partir des types prédéfinis du C (caractères, entiers,
Les bases du C
● Syntaxe flottants), on peut créer de nouveaux types, appelés types
● types de base
● Les opérateurs
contruits, qui permettent de représenter des ensembles de
● Types construits
● Les tableaux
données organisées.
● chaînes de caractères
● contrôle de flot
■ Les tableaux
Les fonctions ■ Les structures
Les entrées-sorties ■ Les unions
Introduction
■ Les énumérations
Pointeur de fonctions
Erreurs courante en C
■ Les constructeurs de type
- p. 28/81
Les tableaux
- p. 29/81
Tableaux: exemple
introduction
introduction
Les bases du C
#define M 2
● Syntaxe
● types de base
#define N 3
● Les opérateurs int tab[M][N] = {{1, 2, 3}, {4, 5, 6}};
● Types construits
● Les tableaux
● chaînes de caractères
● contrôle de flot
main()
Les fonctions
{
Les entrées-sorties
int i, j;
for (i = 0 ; i < M; i++)
Introduction
{
Pointeur de fonctions
for (j = 0; j < N; j++)
Erreurs courante en C
printf("tab[%d][%d]=%d\n",i,j,tab[i][j]);
}
}
tab[0][0]=1
tab[0][1]=2
tab[0][2]=3
tab[1][0]=4
tab[1][1]=5
tab[1][2]=6 - p. 31/81
- p. 32/81
Les structures
introduction ■ Une structure est une suite finie d’objets de types différents.
Les bases du C
● Syntaxe
■ Contrairement aux tableaux, les différents éléments d’une
● types de base
● Les opérateurs
structure n’occupent pas nécessairement des zones
● Types construits
● Les tableaux
contiguës en mémoire.
● chaînes de caractères
● contrôle de flot
■ Chaque élément de la structure, appelé membre ou champ,
norme=sqrt(z.reelle*z.reelle+z.imaginaire*z.imaginaire);
- p. 33/81
Les fonctions
Les entrées-sorties
Introduction
Pointeur de fonctions
Erreurs courante en C
- p. 34/81
Les boucles
Introduction
■ Boucles for
Pointeur de fonctions
expr 1;
while (expr 2 )
Erreurs courante en C for (expr 1 ;expr 2 ;expr 3)
⇔ {instruction
instruction
expr 3;
}
- p. 35/81
Passage de paramètres
- p. 39/81
introduction
//fonction factorielle
Les bases du C
//calcule n! ou n entier
Les fonctions
int factorielle(int n)
● Les fonctions
● Récursivité {int i, fact;
● Portée des variables
//double initialisation
Les entrées-sorties
for (i = 1,fact=1; i<=n; i++)
Introduction
fact *= i;
Pointeur de fonctions
return(fact);
Erreurs courante en C
} ■ Compilation:
gcc fact1.c -o fact
//fonction main
//affiche 10! à l’ecran
int main()
{int x;
x=factorielle(10);
printf("10!=%d\n",x);
return(0);
}
- p. 40/81
Fonction avec déclaration des en-têtes
//Declaration en-tetes
int factorielle(int n);
introduction
Les bases du C
//fonction main
Les fonctions
//affiche 10! à l’ecran
● Les fonctions int main()
● Récursivité
● Portée des variables {int x;
Les entrées-sorties x=factorielle(10);
Introduction
printf("10!=%d\n",x); ■ attention au ; après
Pointeur de fonctions
return(0); l’en-tête.
Erreurs courante en C
} ■ Commande de
compilation:
//fonction factorielle gcc fact1.c -o
//calcule n! ou n entier fact
int factorielle(int n)
{int i, fact;
//double initialisation
for (i = 1,fact=1; i<=n; i++)
fact *= i;
return(fact);
}
- p. 41/81
Deux fichiers
//fichier main1.c
//fichier fact3.c
introduction
//Declaration en-tetes
Les bases du C
//fonction factorielle int factorielle(int n);
Les fonctions
//calcule n! ou n entier
● Les fonctions int factorielle(int n) //fonction main
● Récursivité
● Portée des variables {int i, fact; //affiche 10! à l’ecran
Les entrées-sorties //double initialisation int main()
Introduction for (i = 1,fact=1; i<=n; i++) {int x;
Pointeur de fonctions
fact *= i; x=factorielle(10);
Erreurs courante en C
return(fact); printf("10!=%d\n",x);
} return(0);
}
■ Commandes de compilation:
gcc -c fact3.c -o fact3.o
gcc -c main1.c -o main1.o
gcc main1.o fact3.o -o main1
- p. 42/81
Fonctions: La bonne manière de faire
//fichier fact3.h
//fichier fact3.c
introduction
//Declaration en-tetes
Les bases du C
int factorielle(int n);
//fonction factorielle
Les fonctions
//fichier main2.c
● Les fonctions
//calcule n! ou n entier
#include "fact3.h"
● Récursivité int factorielle(int n)
● Portée des variables //fonction main
{int i, fact;
Les entrées-sorties //affiche 10! à l’ecran
//double initialisation
Introduction int main()
for (i = 1,fact=1; i<=n; i++)
Pointeur de fonctions {int x;
fact *= i;
Erreurs courante en C
x=factorielle(10);
return(fact);
printf("10!=%d\n",x);
}
return(0);
}
■ On définit les en-têtes dans un fichier d’en-têtes pour la
réutilisation par d’autres programmes.
■ Commandes de compilation:
gcc -c fact3.c -o fact3.o
gcc -c main2.c -o main2.o
gcc main2.o fact3.o -o main2 - p. 43/81
Récursivité
return(fact);
}
- p. 44/81
Récursivité
- p. 45/81
Pointeur de fonctions
■ Chaque variable déclarée a une portée (ou durée de vie) qui
Erreurs courante en C
est la portion de code dans laquelle elle est connue.
■ On peut déclarer des variables au début de chaque bloc
(début d’une fonction ou portion de code entre accolade). La
portée (ou durée de vie) de ces variables est limitée au bloc.
■ Les blocs sont forcément imbriqués lexicalement, lors d’une
utilisation d’une variable n, elle peut avoir été déclarée deux
fois dans la suite des blocs englobant. L’utilisation
correspond à celle de la première définition rencontrée
lorsque l’on remonte dans les blocs (i.e. la dernière
effectuée temporellement).
- p. 46/81
Portée: exemple
main()
{int i;
for (i = 0; i < 5; i++)
fonction();
}
----------------
appel numero 1
appel numero 1
appel numero 1
appel numero 1 - p. 47/81
appel numero 1
Portée: exemple
introduction int n;
Les bases du C void fonction();
Les fonctions
● Les fonctions
● Récursivité
void fonction()
● Portée des variables { n++;
Les entrées-sorties printf("appel numero %d\n",n);
Introduction return;
Pointeur de fonctions }
Erreurs courante en C
main()
{ int i;
for (i = 0; i < 5; i++)
fonction();
}
-----------------
appel numero 1
appel numero 2
appel numero 3
appel numero 4
appel numero 5 - p. 48/81
Les entrées-sorties
- p. 49/81
La fonction printf
- p. 50/81
printf: exemples
- p. 51/81
Encore printf
- p. 52/81
Encore printf
introduction ■ programme:
Les bases du C #include <stdio.h>
Les fonctions
return(0);
}
■ résultat:
trisset@hom:~/cours/2005/AGP/cours_tri/transp$ exChar
Ascii[65]=A, en octal: 101 en hexa: 41
Ascii[65]=A, en octal: 101 en hexa: 41
trisset@hom:~/cours/2005/AGP/cours_tri/transp$
- p. 53/81
introduction ■ programme:
Les bases du C #include <stdio.h>
Les fonctions
fprintf(stdout,"chaine=%s,\n",chaine);
fprintf(stdout,"fausseChaine=%s,\n",fausseChaine);
return(0);
}
■ résultat:
trisset@hom:~/cours/2005/AGP/cours_tri/transp$ exChar2
chaine=AAA,
fausseChaine=AAA·öÿ¨öÿ¿;<nAAA,
trisset@hom:~/cours/2005/AGP/cours_tri/transp$
- p. 54/81
La fonction scanf
Erreurs courante en C
■ exemple:
#include <stdio.h>
main()
{
int i;
printf("entrez un entier sous forme hexadecimale i = ");
scanf("%x",&i);
printf("i = %d\n",i);
}
■ Si on entre au clavier la valeur 1a, le programme affiche i = 26.
■ Attention à bien donner l’adresse de la variable à affecter.
- p. 55/81
- p. 56/81
Fichiers
- p. 57/81
Fichiers
introduction ■ on peut ouvrir un fichier sous plusieurs modes: lecture ("r"), écriture au début ("w"),
Les bases du C écriture à la fin ("a"). fopen retourne 0 en cas d’echec.
Les fonctions
■ Exemple:
FILE *fich;
Les entrées-sorties
● Les entrées-sorties fich=fopen("./monFichier.txt");
if (!fich) fprintf(stderr,"Erreur d’ouverture : %s\n","./monFichier.txt");
Introduction
■ Un objet de type FILE est quelquefois appelé un déscripteur de fichier, c’est un entier
Pointeur de fonctions
désignant quel est le fichier manipulé.
Erreurs courante en C
■ Trois descripteurs de fichier peuvent être utilisés sans qu’il soit nécessaire de les ouvrir
(à condition d’utiliser stdio.h):
◆ stdin (standard input) : unité d’entrée (par défaut, le clavier, valeur du
descripteur: 1) ;
◆ stdout (standard output) : unité de sortie (par défaut, l’écran, valeur du
descripteur: 0) ;
◆ stderr (standard error) : unité d’affichage des messages d’erreur (par défaut,
l’écran, valeur du descripteur: 2).
■ Il est fortement conseillé d’afficher systématiquement les messages d’erreur sur stderr
afin que ces messages apparaissent à l’écran même lorsque la sortie standard est
redirigée.
- p. 58/81
Autres fonction de lecture/ecriture
- p. 59/81
- p. 60/81
Arguments de la fonction main
- p. 61/81
- p. 63/81
Plan
Pointeur de fonctions
Erreurs courante en C
- p. 64/81
Utilité des pointeurs de fonction
- p. 65/81
Un premier exemple
introduction
#include <stdio.h>
Les bases du C
#include <stdlib.h>
Les fonctions
//declaration de fonction
Les entrées-sorties
int fonct1(int a)
Introduction
Pointeur de fonctions
{
Erreurs courante en C
fprintf(stdout,"Je suis fonct1(%d)\n",a);
return(0);
}
int main()
{// declaration de pointeur de fonction
int (*foncPtr)(int a);
foncPtr=&fonct1;
(*foncPtr)(10);
return(0);
} - p. 66/81
Comprendre les déclarations
- p. 67/81
- p. 68/81
En fait, c’est un peu plus compliqué...
foncPtr=fonct1;
foncPtr(10);
- p. 69/81
introduction
#include <stdio.h>
Les bases du C
#include <stdlib.h>
Les fonctions
//declaration de fonction
Les entrées-sorties
int fonct1(int a)
Introduction
Pointeur de fonctions
{
Erreurs courante en C
fprintf(stdout,"Je suis fonct1(%d)\n",a);
return(0);
}
int main()
{// declaration de pointeur de fonction
int (*foncPtr)(int a);
foncPtr=fonct1;
foncPtr(10);
return(0);
} - p. 70/81
Un autre exemple
introduction
int main(void)
Les bases du C
{
Les fonctions
//comparaison de deux entiers int i,t[6]={1,5,2,3,6,4};
Les entrées-sorties
Introduction
int croissant(int i, int j) trie(t, 6, croissant);
Pointeur de fonctions
{ for(i=0;i<6;i++)
Erreurs courante en C
if (i<=j) return 0; fprintf(stdout," %d ",t[
else return 1; fprintf(stdout,"\n");
}
int decroissant(int i, int j) trie(t, 6, decroissant);
{ for(i=0;i<6;i++)
if (i<=j) return 1; fprintf(stdout," %d ",t[
else return 0; fprintf(stdout,"\n");
} return 0;
}
- p. 71/81
introduction
void trie(int tableau[], int taille, int (fcomp)(int, int))
Les bases du C
{
Les fonctions
int i,j,min;
Les entrées-sorties
//tri par permuation avec fcomp comme fonction de comparaiso
Introduction
Pointeur de fonctions
for (i=0;i<taille;i++)
Erreurs courante en C
{
min=tableau[i];
for (j=i+1;j<taille;j++)
if (fcomp(tableau[i],tableau[j]))
{
min = tableau[j];
tableau[j]=tableau[i];
tableau[i]=min;
}
}
return ;
} - p. 72/81
Passage de fonction par référence
- p. 73/81
fcomp=croissant;
trie(t, 6, fcomp);
for(i=0;i<6;i++)
fprintf(stdout," %d ",t[i]);
fprintf(stdout,"\n");
changeOrdre(&fcomp,decroissant);
trie(t, 6, fcomp);
for(i=0;i<6;i++) - p. 74/81
introduction
Les bases du C
Les fonctions
Les entrées-sorties
Introduction
Pointeur de fonctions
Erreurs courante en C
Les erreurs courantes en C
- p. 75/81
Confusion entre == et =
introduction
■ À ne pas faire:
Les bases du C
if (size = 0) ....
Les fonctions
■ Détection: l’option -Wall du compilateur avertit le
Les entrées-sorties
programmeur (warning)
Introduction
Pointeur de fonctions
Erreurs courante en C
- p. 76/81
Confusion entre opérateurs logiques et binaires
Pointeur de fonctions
■ Le OU logique (||) qui retourne 0 ou 1 (en s’arrêtant au
premier argument s’il est vrai)
Erreurs courante en C
- p. 77/81
Problèmes de macros
- p. 78/81
Fonctions retournant un caractère getc...
introduction char c;
Les bases du C while ( (c = getchar ()) != EOF)
Les fonctions ...
Les entrées-sorties ■ La fonction getchar retourne un entier
Introduction
■ Les cast implicites effectués sont:
Pointeur de fonctions
while ( (int)(c = (char)getchar ()) != EOF)
Erreurs courante en C
■ le caractère EOF (qui marque la fin d’un fichier : End Of File)
est un caractère invalide généralement égal à -1 mais il peut
parfaitement être égal à 128, dans ce cas on dépasse la
capacité de stockage d’un char et l’on se retrouve avec un
résultat égal à -128 : la condition du while sera toujours
fausse, le programme boucle indéfiniment!
■ Il faut écrire:
int cInt;
char c;
while ( (cInt = getchar ()) != EOF)
{
c=(char)cInt; - p. 79/81
...
- p. 80/81
Et les plus courantes...
Les entrées-sorties
■ exemple de fichier configuration vi:
Introduction
syntax on " coloration syntaxique
Pointeur de fonctions
set autoindent " identation
Erreurs courante en C
set cindent " pour C
set nopaste
set ts=4 " tabulation a 4 caracteres
set sw=4
■ Sous vi:
◆ == pour indenter la ligne courante,
◆ =G pour identer tout le fichier:
- p. 81/81