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 ... caseswitch ... caseforforforcontinue, breakcontinue 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)$?