Les bases
1. Structure d’un programme C
/* exemple de programme élémentaire */ (1)
#include <stdio.h> (2)
// fonction principale (3)
int main() (4)
{
printf("Hello World !") ; // écrire sur la sortie standard (5)
return 0 ; // 0 signifie OK (6)
}
1 | format historique des commentaires |
2 | directive préprocesseur visant à déclarer la fonction printf |
3 | autre forme de commentaire |
4 | main est le point d’entrée de tout programme C |
5 | appel à la fonction printf de la bibliothèque standard C (libc ) |
6 | terminaison de l’exécution et renvoi d’un code de retour à l’OS |
La commande Unix
|
2. Compiler un programme
$ cc -Wall -o prog prog.c # génère l'exécutable prog à partir de prog.c
$ ./prog # exécute prog
Pour obtenir des explications sur l’utilisation de la commande
|
Récupérer le code de retour d’une exécution avec la variable shell $?
:
$ ./prog
$ echo $?
Utiliser le code de retour comme une condition :
$ ./prog && echo "l'exécution s'est bien passée"
$ ./prog || echo "fin anormale, le programme a renvoyé $?"
3. Structures de contrôle
3.1. Instruction itérative for
// calcule 1+2+3+ ... +n avec for
#include <stdio.h>
int main()
{
int S=0, i, n ;
scanf("%d",&n) ;
for (i=1 ; i<=n ; i++)
S += i ;
printf("S=%d\n",S) ;
return 0 ;
}
3.2. Instruction itérative while
/* même chose avec while */
i = 1 ;
while (i<=n)
{
S += i ;
i++ ;
}
3.3. Instruction itérative do while
/* même chose avec do while */
i = 0 ;
do {
i++ ;
S += i ;
} while (i<=n) ;
3.4. Instruction conditionnelle if
#include <stdio.h>
#include <math.h> // pour déclarer sqrt
#define PR "premier"
int main()
{
int i=2, n ;
printf("entrez un entier >2 : ") ;
scanf("%d",&n) ;
while (n%i!=0 && i<=sqrt(n)) i++ ;
if (n%i!=0)
printf("%d est %s\n",n,PR) ;
else
printf("%d n'est pas %s\n",n,PR) ;
return 0 ;
}
3.5. Instruction alternative switch
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
4. Types scalaires prédéfinis
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
5. Opérateurs
- opérateurs arithmétiques
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
- opérateur conditionnel
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
- opérateurs de manipulation de bits
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
- cast
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
6. Quelques fonctions d’E/S
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
7. Automatiser les compilations
La commande make
permet de lancer les compilations suivant un ensemble de règles définies dans un fichier makefile
ou Makefile
situé dans le répertoire courant.
%: %.c (1)
<tabulation> gcc -Wall -o $@ $@.c (2)
1 | ceci est une règle de dépendance qui signifie :
tout binaire dépend du fichier .c de même nom.
A gauche du signe : , on a la cible, et à droite, ses dépendances |
2 | ceci est une action pour mettre à jour la cible |
L’ensemble forme un bloc qui signifie :
"tout binaire dépend du fichier .c
de même nom, et s’obtient avec la commande gcc
indiquée".
|
Ce Makefile
permet de compiler tout programme prog.c
avec la commande make prog
.
Il est possible d’ajouter des exceptions pour les programmes qui ne se compilent
pas avec la commande indiquée :
# règle implicite
%: %.c
gcc -Wall -o $@ $@.c (1)
# règles spécifiques
premier: premier.c
gcc -Wall -o $@ $@.c -lm
1 | $@ représente la cible des dépendances (donc ici l’exécutable) |