% Programmation séquentielle en C % Base II - Inspirés des slides de F. Glück % 25 septembre 2019 # Les fonctions (1/N) - Chaque partie indépendante d'un programme se met dans une fonction. - Syntaxe: ```C type identificateur(paramètres) { // variables optionnelles instructions; return expression; // type donne le type d'expression } ``` - Exemple: ```C int max(int a, int b) { if (a > b) { return a; } else { return b; } } int main() { int c = max(4, 5); } ``` # Les fonctions (2/N) - Il existe un type `void`{.C}, "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`{.C} utilisé pour sortir de la fonction. - Exemple: ```C void show_text(void) { // second void optionnel printf("Aucun argument et pas de retour.\n"); return; // optionnel } void show_text_again() { // c'est pareil printf("Aucun argument et pas de retour.\n"); } ``` # Les fonctions (3/N) ## Prototypes de fonctions - 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. ```C int max(int a, int b); // prototype int max(int a, int b) { // implémentation if (a > b) { return a; } else { return b; } } ``` # La fonction `main()` (1/N) ## Généralités - Point d'entrée du programme. - Retourne le code d'erreur du programme: - 0: tout s'est bien passé. - Pas zéro: problème. - La valeur de retour peut être lue par le shell qui a exécuté le programme. - `EXIT_SUCCESS`{.C} et `EXIT_FAILURE`{.C} (de `stdlib.h`) sont des valeurs de retour **portables** de programmes C. # La fonction `main()` (2/N) ## Exemple ```C int main() { // ... if (error) return EXIT_FAILURE; else return EXIT_SUCCESS; } ``` - Le code d'erreur est lu dans le shell avec `$?`{.bash} ```bash $ ./prog $ echo $? 0 # tout s'est bien passé par exemple $ if [ $? -eq 0 ]; then echo "OK" ; else echo "ERROR"; fi ERROR # si tout s'est mal passé ```