Programmation séquentielle en C, 2020-2021
Orestis Malaspinas (A401), ISC, HEPIA
2020-09-23
switch
.. case
(1/2)switch (expression) {
case constant-expression:
instructions;
break; // optionnel
case constant-expression:
instructions;
break; // optionnel
// ...
default:
instructions;
}
Que se passe-t-il si break
est absent?
switch
.. case
(2/2)int x = 0;
switch (x) {
case 0:
case 1:
printf("0 ou 1\n");
break;
case 2:
printf("2\n");
break;
default:
printf("autre\n");
}
Dangereux, mais c’est un moyen d’avoir un “ou” logique dans un case.
switch ... case
switch ... case
for
for
for
continue
, break
continue
saute à la prochaine itération d’une boucle.
break
quitte le bloc itératif courant d’une boucle.
bits | 00110101 | 10010000 | …. | 00110011 | …. | …. |
---|---|---|---|---|---|---|
addr | 2000 | 2001 | …. | 4000 | …. | …. |
type a = valeur
, possède:
char
, int
, …),valeur
),&a
),Les parties indépendantes d’un programme.
Permettent de modulariser et compartimenter le code.
Syntaxe:
Il existe un type void
, “sans type”, en C.
Il peut être utilisé pour signifier qu’une fonction ne retourne rien, ou qu’elle n’a pas d’arguments.
return
utilisé pour sortir de la fonction.
Exemple:
Le prototype donne la signature de la fonction, avant qu’on connaisse son implémentation.
L’appel d’une fonction doit être fait après la déclaration du prototype.
Les arguments d’une fonction sont toujours passés par copie.
Les arguments d’une fonction ne peuvent jamais être modifiés.
x
, est accédé par &x
.int *x
.*x
sert à déréférencer le pointeur (à accéder à la mémoire pointée).void set_to_two(int *a) {
// a contient une copie de l'adresse de la
// variable passée en argument
*a = 2; // on accède à la valeur pointée par a,
// et on lui assigne 2
} // le pointeur est détruit, pas la valeur pointée
int main() {
int x = -1;
set_to_two(&x); // l'adresse de x est passée
// x vaudra 2 ici
}
main()
(1/2)EXIT_SUCCESS
et EXIT_FAILURE
(de stdlib.h
) sont des valeurs de retour portables de programmes C.main()
(2/2)$?