Cours donné par:
Pr. Nawal Alioua Année universitaire:
2019-202
Plan
1 Introduction
2 Règles générales
3 Prototype ou déclaration d'une fonction)
4 Passage des arguments
5 Variables globales Vs variables locales
1 Introduction
2 Règles générales
3 Prototype ou déclaration d'une fonction)
4 Passage des arguments
5 Variables globales Vs variables locales
Les fonctions en langage C
Le rôle d'une fonction en programmation est similaire à celui d'une fonction en mathématique : elle traite des données et retourne un résultat à partir des valeurs des paramètres
Le langage C permet de découper un programme en plusieurs parties ou modules.
Laprogrammation modulaireest utile puisque :
Un programme écrit en un seul bloc devient dicile à lire dès qu'il dépasse une ou deux pages de texte.
Elle permet d'éviter des séquences d'instructions répétitives.
Elle permet le partage de codes communs qu'il sut d'écrire une seule fois.
La programmation modulaire consiste à utiliser des fonctions
Une fonction dispose d'arguments. C'est les informations transmises à la fonction.
Le rôle d'une fonction en programmation est similaire à celui d'une fonction en mathématique : elle traite des données et retourne un résultat à partir des valeurs des paramètres
Le langage C permet de découper un programme en plusieurs parties ou modules.
Laprogrammation modulaireest utile puisque :
Un programme écrit en un seul bloc devient dicile à lire dès qu'il dépasse une ou deux pages de texte.
Elle permet d'éviter des séquences d'instructions répétitives.
Elle permet le partage de codes communs qu'il sut d'écrire une seule fois.
La programmation modulaire consiste à utiliser des fonctions
Une fonction dispose d'arguments. C'est les informations transmises à la fonction.
Les fonctions en langage C
Le rôle d'une fonction en programmation est similaire à celui d'une fonction en mathématique : elle traite des données et retourne un résultat à partir des valeurs des paramètres
Le langage C permet de découper un programme en plusieurs parties ou modules.
Laprogrammation modulaireest utile puisque :
Un programme écrit en un seul bloc devient dicile à lire dès qu'il dépasse une ou deux pages de texte.
Elle permet d'éviter des séquences d'instructions répétitives.
Elle permet le partage de codes communs qu'il sut d'écrire une seule fois.
La programmation modulaire consiste à utiliser des fonctions
Une fonction dispose d'arguments. C'est les informations transmises à la fonction.
Le rôle d'une fonction en programmation est similaire à celui d'une fonction en mathématique : elle traite des données et retourne un résultat à partir des valeurs des paramètres
Le langage C permet de découper un programme en plusieurs parties ou modules.
Laprogrammation modulaireest utile puisque :
Un programme écrit en un seul bloc devient dicile à lire dès qu'il dépasse une ou deux pages de texte.
Elle permet d'éviter des séquences d'instructions répétitives.
Elle permet le partage de codes communs qu'il sut d'écrire une seule fois.
La programmation modulaire consiste à utiliser des fonctions
Une fonction dispose d'arguments. C'est les informations transmises à la fonction.
Les fonctions en langage C
Une fonction peut prendre des aspects diérents:
- La valeur d'une fonction peut ne pas être utilisée. (Exemple: printf ou scanf, qui réalisent une action).
- Une fonction peutne pas fournir de valeur.
- Une fonction peut fournir un résultat non scalaire. (tableau par exemple)
- Une fonction peutmodier les valeurs de ses arguments (lorsque leur adresse est transmise) .
L'utilisation d'une fonction se fera par simple écriture de son nom dans le programme principale.
Le résultat étant une valeur, il devra être aecté ou utilisé dans une expression, un achage, ...
Une fonction peut prendre des aspects diérents:
- La valeur d'une fonction peut ne pas être utilisée. (Exemple: printf ou scanf, qui réalisent une action).
- Une fonction peutne pas fournir de valeur.
- Une fonction peut fournir un résultat non scalaire. (tableau par exemple)
- Une fonction peutmodier les valeurs de ses arguments (lorsque leur adresse est transmise) .
L'utilisation d'une fonction se fera par simple écriture de son nom dans le programme principale.
Le résultat étant une valeur, il devra être aecté ou utilisé dans une expression, un achage, ...
Les fonctions en langage C
Une fonction peut prendre des aspects diérents:
- La valeur d'une fonction peut ne pas être utilisée. (Exemple: printf ou scanf, qui réalisent une action).
- Une fonction peutne pas fournir de valeur.
- Une fonction peut fournir un résultat non scalaire. (tableau par exemple)
- Une fonction peutmodier les valeurs de ses arguments (lorsque leur adresse est transmise) .
L'utilisation d'une fonction se fera par simple écriture de son nom dans le programme principale.
Le résultat étant une valeur, il devra être aecté ou utilisé dans une expression, un achage, ...
Une fonction peut prendre des aspects diérents:
- La valeur d'une fonction peut ne pas être utilisée. (Exemple: printf ou scanf, qui réalisent une action).
- Une fonction peutne pas fournir de valeur.
- Une fonction peut fournir un résultat non scalaire. (tableau par exemple)
- Une fonction peutmodier les valeurs de ses arguments (lorsque leur adresse est transmise) .
L'utilisation d'une fonction se fera par simple écriture de son nom dans le programme principale.
Le résultat étant une valeur, il devra être aecté ou utilisé dans une expression, un achage, ...
Les fonctions en langage C
Une fonction peut prendre des aspects diérents:
- La valeur d'une fonction peut ne pas être utilisée. (Exemple: printf ou scanf, qui réalisent une action).
- Une fonction peutne pas fournir de valeur.
- Une fonction peut fournir un résultat non scalaire. (tableau par exemple)
- Une fonction peutmodier les valeurs de ses arguments (lorsque leur adresse est transmise) .
L'utilisation d'une fonction se fera par simple écriture de son nom dans le programme principale.
Le résultat étant une valeur, il devra être aecté ou utilisé dans une expression, un achage, ...
Une fonction peut prendre des aspects diérents:
- La valeur d'une fonction peut ne pas être utilisée. (Exemple: printf ou scanf, qui réalisent une action).
- Une fonction peutne pas fournir de valeur.
- Une fonction peut fournir un résultat non scalaire. (tableau par exemple)
- Une fonction peutmodier les valeurs de ses arguments (lorsque leur adresse est transmise) .
L'utilisation d'une fonction se fera par simple écriture de son nom dans le programme principale.
Le résultat étant une valeur, il devra être aecté ou utilisé dans une expression, un achage, ...
Exemple d'une fonction
Leprogramme principalcorrespond à la fonction main().
La fonction fexemple() possède une structure voisine de la fonction main, mais sonen-têtecontient en plus uneliste d'arguments(nom + type).
Les arguments correspondent aux données qui seront traitées par la fonction
Leprogramme principalcorrespond à la fonction main().
La fonction fexemple() possède une structure voisine de la fonction main, mais sonen-têtecontient en plus uneliste d'arguments(nom + type).
Les arguments correspondent aux données qui seront traitées par la fonction
Exemple d'une fonction
Leprogramme principalcorrespond à la fonction main().
La fonction fexemple() possède une structure voisine de la fonction main, mais sonen-têtecontient en plus uneliste d'arguments(nom + type).
Les arguments correspondent aux données qui seront traitées par la fonction
Les noms des arguments n'ont d'importance qu'à l'intérieur du corps de la fonction.
Dans le corps de la fonction, on a:
- La déclaration d'une variable locale à la fonction: oat val;
- L'instructionreturn val qui précise la valeur que fournira la fonction à la n de son travail
Dans le corps de la fonction main:
- On a la déclaration de la fonctionoat fexemple(oat, int, int);
- La déclaration d'une fonction porte le nom deprototype.
- Le rôle du prototype est de prévenir le compilateur que fexempleest une fonction, en spéciant le type de ses arguments et de sa valeur de retour.
Le prototype informe le compilateur que le code de la fonctionfexemple sera fournit par la suite dans le programme ou dans un autre chier .c
Explication de l'exemple
Les noms des arguments n'ont d'importance qu'à l'intérieur du corps de la fonction.
Dans le corps de la fonction, on a:
- La déclaration d'une variable locale à la fonction: oat val;
- L'instructionreturn val qui précise la valeur que fournira la fonction à la n de son travail
Dans le corps de la fonction main:
- On a la déclaration de la fonctionoat fexemple(oat, int, int);
- La déclaration d'une fonction porte le nom deprototype.
- Le rôle du prototype est de prévenir le compilateur que fexempleest une fonction, en spéciant le type de ses arguments et de sa valeur de retour.
Le prototype informe le compilateur que le code de la fonctionfexemple sera fournit par la suite dans le programme ou dans un autre chier .c
Les noms des arguments n'ont d'importance qu'à l'intérieur du corps de la fonction.
Dans le corps de la fonction, on a:
- La déclaration d'une variable locale à la fonction: oat val;
- L'instructionreturn val qui précise la valeur que fournira la fonction à la n de son travail
Dans le corps de la fonction main:
- On a la déclaration de la fonctionoat fexemple(oat, int, int);
- La déclaration d'une fonction porte le nom deprototype.
- Le rôle du prototype est de prévenir le compilateur que fexempleest une fonction, en spéciant le type de ses arguments et de sa valeur de retour.
Le prototype informe le compilateur que le code de la fonctionfexemple sera fournit par la suite dans le programme ou dans un autre chier .c
Plan
1 Introduction
2 Règles générales
3 Prototype ou déclaration d'une fonction)
4 Passage des arguments
5 Variables globales Vs variables locales
Arguments muets(ou arguments formels ou paramètres formels):
- Noms des arguments gurant dans l'en-tête de la fonction
- Leur rôle est de décrire le travail eectué dans le corps de la fonction.
Arguments eectifs(ou paramètres eectifs):
- Arguments fournis au moment de l'appel de la fonction.
- Il est possible d'utiliserune expressioncomme argument eectif. C'est la valeur de cette expression qui sera transmise à la fonction lors de son appel.
Règles pour les fonctions
Arguments muets(ou arguments formels ou paramètres formels):
- Noms des arguments gurant dans l'en-tête de la fonction
- Leur rôle est de décrire le travail eectué dans le corps de la fonction.
Arguments eectifs(ou paramètres eectifs):
- Arguments fournis au moment de l'appel de la fonction.
- Il est possible d'utiliserune expressioncomme argument eectif. C'est la valeur de cette expression qui sera transmise à la fonction lors de son appel.
L'instruction returnpeut mentionner une expression. Par exemple:
L'instruction returnpeut apparaître à plusieurs reprisesdans une fonction, Par exemple:
L'instruction returndénit la valeur du résultat etarrête l'exécutionde la fonction en revenant dans la fonction qui l'a appelée.
Règles pour les fonctions
L'instruction returnpeut mentionner une expression. Par exemple:
L'instruction returnpeut apparaître à plusieurs reprisesdans une fonction, Par exemple:
L'instruction returndénit la valeur du résultat etarrête l'exécutionde la fonction en revenant dans la fonction qui l'a appelée.
L'instruction returnpeut mentionner une expression. Par exemple:
L'instruction returnpeut apparaître à plusieurs reprisesdans une fonction, Par exemple:
L'instruction returndénit la valeur du résultat etarrête l'exécutionde la fonction en revenant dans la fonction qui l'a appelée.
Règles pour les fonctions
Tous les modules en langage C sont des fonctions, y compris le programme principal (fonction main).
En langage C, la procédure n'existe pascomme notion indépendante.
Elle correspond tout simplement à une fonction qui ne fournit pas de valeur de retour:
- Elle peut soit disposer d'une ou plusieursreturnsans expression, qui arrêtent simplement l'exécution de la fonction
- Ou ne conteniraucune instructionreturn. Le retour est alors mis en place automatiquement par le compilateur à la n de la fonction (juste avant l'accolade fermente de la fonction }).
Si le type de l'expression gurant dans returnest diérent du type du résultat déclaré dans l'en-tête, le compilateur mettra automatiquement en place des instructions de conversion.
Il est toujours possible de ne pas utiliser le résultatd'une fonction, même si elle en produit un.
Tous les modules en langage C sont des fonctions, y compris le programme principal (fonction main).
En langage C, la procédure n'existe pascomme notion indépendante.
Elle correspond tout simplement à une fonction qui ne fournit pas de valeur de retour:
- Elle peut soit disposer d'une ou plusieursreturnsans expression, qui arrêtent simplement l'exécution de la fonction
- Ou ne conteniraucune instructionreturn. Le retour est alors mis en place automatiquement par le compilateur à la n de la fonction (juste avant l'accolade fermente de la fonction }).
Si le type de l'expression gurant dans returnest diérent du type du résultat déclaré dans l'en-tête, le compilateur mettra automatiquement en place des instructions de conversion.
Il est toujours possible de ne pas utiliser le résultatd'une fonction, même si elle en produit un.
Règles pour les fonctions
Tous les modules en langage C sont des fonctions, y compris le programme principal (fonction main).
En langage C, la procédure n'existe pascomme notion indépendante.
Elle correspond tout simplement à une fonction qui ne fournit pas de valeur de retour:
- Elle peut soit disposer d'une ou plusieursreturnsans expression, qui arrêtent simplement l'exécution de la fonction
- Ou ne conteniraucune instructionreturn. Le retour est alors mis en place automatiquement par le compilateur à la n de la fonction (juste avant l'accolade fermente de la fonction }).
Si le type de l'expression gurant dans returnest diérent du type du résultat déclaré dans l'en-tête, le compilateur mettra automatiquement en place des instructions de conversion.
Il est toujours possible de ne pas utiliser le résultatd'une fonction, même si elle en produit un.
Tous les modules en langage C sont des fonctions, y compris le programme principal (fonction main).
En langage C, la procédure n'existe pascomme notion indépendante.
Elle correspond tout simplement à une fonction qui ne fournit pas de valeur de retour:
- Elle peut soit disposer d'une ou plusieursreturnsans expression, qui arrêtent simplement l'exécution de la fonction
- Ou ne conteniraucune instructionreturn. Le retour est alors mis en place automatiquement par le compilateur à la n de la fonction (juste avant l'accolade fermente de la fonction }).
Si le type de l'expression gurant dans returnest diérent du type du résultat déclaré dans l'en-tête, le compilateur mettra automatiquement en place des instructions de conversion.
Il est toujours possible de ne pas utiliser le résultatd'une fonction, même si elle en produit un.
Règles pour les fonctions
Tous les modules en langage C sont des fonctions, y compris le programme principal (fonction main).
En langage C, la procédure n'existe pascomme notion indépendante.
Elle correspond tout simplement à une fonction qui ne fournit pas de valeur de retour:
- Elle peut soit disposer d'une ou plusieursreturnsans expression, qui arrêtent simplement l'exécution de la fonction
- Ou ne conteniraucune instructionreturn. Le retour est alors mis en place automatiquement par le compilateur à la n de la fonction (juste avant l'accolade fermente de la fonction }).
Si le type de l'expression gurant dans returnest diérent du type du résultat déclaré dans l'en-tête, le compilateur mettra automatiquement en place des instructions de conversion.
Il est toujours possible de ne pas utiliser le résultatd'une fonction, même si elle en produit un.
Quand une fonctionne renvoie pas de résultat, on le précise dans l'en-tête et dans sa déclaration, avec le mot-clévoid. Par exemple :
Naturellement, la dénition d'une telle fonction ne doit, en principe, conteniraucune instructionreturn. Certains compilateurs ne détecteront pas l'erreur.
Quand une fonction ne contientaucun argument, on place le mot-clé void à la place de la liste d'arguments. Par exemple :
Règles pour les fonctions
Quand une fonctionne renvoie pas de résultat, on le précise dans l'en-tête et dans sa déclaration, avec le mot-clévoid. Par exemple :
Naturellement, la dénition d'une telle fonction ne doit, en principe, conteniraucune instructionreturn. Certains compilateurs ne détecteront pas l'erreur.
Quand une fonction ne contientaucun argument, on place le mot-clé void à la place de la liste d'arguments. Par exemple :
Quand une fonctionne renvoie pas de résultat, on le précise dans l'en-tête et dans sa déclaration, avec le mot-clévoid. Par exemple :
Naturellement, la dénition d'une telle fonction ne doit, en principe, conteniraucune instructionreturn. Certains compilateurs ne détecteront pas l'erreur.
Quand une fonction ne contientaucun argument, on place le mot-clé void à la place de la liste d'arguments. Par exemple :
Plan
1 Introduction
2 Règles générales
3 Prototype ou déclaration d'une fonction)
4 Passage des arguments
5 Variables globales Vs variables locales
Si on écrit le code de la fonctionfct AVANT le code de la fonctionmain, il n'est pas nécessaire d'inclure le prototype de fct dansmain.
. En eet, lorsque le compilateur traduitmain, il connaît déjàfct
Il est possible dans le prototype, d'écrire des noms d'arguments, choisis totalement au hasard et qui n'ont aucun rapport avec les
paramètres eectifs ou formels. Seul le type et le nombre des arguments sont importants et doivent être respectés dans le prototype
Les deux prototypes suivants sont valides:
- int fonction(int n, oat x);
- int fonction(int, oat);
Prototype d'une fonction
Si on écrit le code de la fonctionfct AVANT le code de la fonctionmain, il n'est pas nécessaire d'inclure le prototype de fct dansmain.
. En eet, lorsque le compilateur traduitmain, il connaît déjàfct
Il est possible dans le prototype, d'écrire des noms d'arguments, choisis totalement au hasard et qui n'ont aucun rapport avec les
paramètres eectifs ou formels. Seul le type et le nombre des arguments sont importants et doivent être respectés dans le prototype
Les deux prototypes suivants sont valides:
- int fonction(int n, oat x);
- int fonction(int, oat);
Si on écrit le code de la fonctionfct AVANT le code de la fonctionmain, il n'est pas nécessaire d'inclure le prototype de fct dansmain.
. En eet, lorsque le compilateur traduitmain, il connaît déjàfct
Il est possible dans le prototype, d'écrire des noms d'arguments, choisis totalement au hasard et qui n'ont aucun rapport avec les
paramètres eectifs ou formels. Seul le type et le nombre des arguments sont importants et doivent être respectés dans le prototype
Les deux prototypes suivants sont valides:
- int fonction(int n, oat x);
- int fonction(int, oat);
Prototype d'une fonction
Si on écrit le code de la fonctionfct AVANT le code de la fonctionmain, il n'est pas nécessaire d'inclure le prototype de fct dansmain.
. En eet, lorsque le compilateur traduitmain, il connaît déjàfct
Il est possible dans le prototype, d'écrire des noms d'arguments, choisis totalement au hasard et qui n'ont aucun rapport avec les
paramètres eectifs ou formels. Seul le type et le nombre des arguments sont importants et doivent être respectés dans le prototype
Les deux prototypes suivants sont valides:
- int fonction(int n, oat x);
- int fonction(int, oat);
Il est possible de placer lle prototype d'une fonction à l'intérieur de toute fonction l'utilisant.
Il est également possible d'utiliser des déclarations globales, en les faisant apparaître avant la dénition de la première fonction. Par exemple :
Le prototype de fexemple est connu à la foisde main et de fct1, car il est placé à l'extérieur et avant ces deux fonctions.
Comment placer les prototypes des fonctions?
Il est possible de placer lle prototype d'une fonction à l'intérieur de toute fonction l'utilisant.
Il est également possible d'utiliser des déclarations globales, en les faisant apparaître avant la dénition de la première fonction. Par exemple :
Le prototype de fexemple est connu à la foisde main et de fct1, car il est placé à l'extérieur et avant ces deux fonctions.
Il est possible de placer lle prototype d'une fonction à l'intérieur de toute fonction l'utilisant.
Il est également possible d'utiliser des déclarations globales, en les faisant apparaître avant la dénition de la première fonction. Par exemple :
Le prototype de fexemple est connu à la foisde main et de fct1, car il est placé à l'extérieur et avant ces deux fonctions.
Utilité de la déclaration des fonctions
La forme de déclaration de fonction la plus complète possible est le prototype:
C'est la forme recommandée pour les déclarations
Elle peut être utilisée par le compilateur de deux façons complètement diérentes:
- Si la dénition de la fonction se trouve dans le même chier source, il s'assure que les arguments formel sont bien letype déni dans le prototype . Dans le cas contraire, il signale une erreur.
- Lorsqu'il rencontre un appel de la fonction, et si cela est nécessaire, il met en placedes conversions des valeurs des arguments eectifs dans le type indiqué dans le prototype.
La forme de déclaration de fonction la plus complète possible est le prototype:
C'est la forme recommandée pour les déclarations
Elle peut être utilisée par le compilateur de deux façons complètement diérentes:
- Si la dénition de la fonction se trouve dans le même chier source, il s'assure que les arguments formel sont bien letype déni dans le prototype . Dans le cas contraire, il signale une erreur.
- Lorsqu'il rencontre un appel de la fonction, et si cela est nécessaire, il met en placedes conversions des valeurs des arguments eectifs dans le type indiqué dans le prototype.
Utilité de la déclaration des fonctions
La forme de déclaration de fonction la plus complète possible est le prototype:
C'est la forme recommandée pour les déclarations
Elle peut être utilisée par le compilateur de deux façons complètement diérentes:
- Si la dénition de la fonction se trouve dans le même chier source, il s'assure que les arguments formel sont bien letype déni dans le prototype . Dans le cas contraire, il signale une erreur.
- Lorsqu'il rencontre un appel de la fonction, et si cela est nécessaire, il met en placedes conversions des valeurs des arguments eectifs dans le type indiqué dans le prototype.
Un tel appel se traduit :
Évaluation de la valeur de l'expression n+1 (en int) et sa conversion en oat,
Évaluation de la valeur de l'expression 2*x (en oat) et sa conversion en int.
Dans ce dernier cas de conversion, on a une conversion dégradante. Ce qui signie qu'on perd les chires après la virgule
Exercices
Ecrire une fonction SommeCarre qui calcule la somme des carrées de deux réels x et y Ecrire une fonction Pair qui détermine si un nombre est pair
Ecrire un programme principal qui ache le résultat de ses deux fonctions, pour des valeurs saisies par l'utilisateur
Ecrire une fonction SommeCarre qui calcule la somme des carrées de deux réels x et y Ecrire une fonction Pair qui détermine si un nombre est pair
Ecrire un programme principal qui ache le résultat de ses deux fonctions, pour des valeurs saisies par l'utilisateur
Exercices
Ecrire une fonction SommeCarre qui calcule la somme des carrées de deux réels x et y Ecrire une fonction Pair qui détermine si un nombre est pair
Ecrire un programme principal qui ache le résultat de ses deux fonctions, pour des valeurs saisies par l'utilisateur
1 Introduction
2 Règles générales
3 Prototype ou déclaration d'une fonction)
4 Passage des arguments
5 Variables globales Vs variables locales
Transmission des paramètres
Il existe deux modes de transmission de paramètres dans les langages de programmation :
La transmission par valeur :
les valeurs des paramètres eectifs sont aectées aux paramètres formels correspondants au moment de l'appel de la fonction.
Dans ce mode, le paramètre eectif ne subit aucune modication de la part de la fonction
La transmission par adresse (ou par référence) :
les adresses des paramètres eectifs sont transmises à la fonction.
Dans ce mode, le paramètre eectif subit les mêmes modications que le paramètre formel lors de l'exécution de la fonction
Il existe deux modes de transmission de paramètres dans les langages de programmation :
La transmission par valeur :
les valeurs des paramètres eectifs sont aectées aux paramètres formels correspondants au moment de l'appel de la fonction.
Dans ce mode, le paramètre eectif ne subit aucune modication de la part de la fonction
La transmission par adresse (ou par référence) :
les adresses des paramètres eectifs sont transmises à la fonction.
Dans ce mode, le paramètre eectif subit les mêmes modications que le paramètre formel lors de l'exécution de la fonction
Transmission des paramètres
Il existe deux modes de transmission de paramètres dans les langages de programmation :
La transmission par valeur :
les valeurs des paramètres eectifs sont aectées aux paramètres formels correspondants au moment de l'appel de la fonction.
Dans ce mode, le paramètre eectif ne subit aucune modication de la part de la fonction
La transmission par adresse (ou par référence) :
les adresses des paramètres eectifs sont transmises à la fonction.
Dans ce mode, le paramètre eectif subit les mêmes modications que le paramètre formel lors de l'exécution de la fonction
Il existe deux modes de transmission de paramètres dans les langages de programmation :
La transmission par valeur :
les valeurs des paramètres eectifs sont aectées aux paramètres formels correspondants au moment de l'appel de la fonction.
Dans ce mode, le paramètre eectif ne subit aucune modication de la part de la fonction
La transmission par adresse (ou par référence) :
les adresses des paramètres eectifs sont transmises à la fonction.
Dans ce mode, le paramètre eectif subit les mêmes modications que le paramètre formel lors de l'exécution de la fonction
Transmission des paramètres
Il existe deux modes de transmission de paramètres dans les langages de programmation :
La transmission par valeur :
les valeurs des paramètres eectifs sont aectées aux paramètres formels correspondants au moment de l'appel de la fonction.
Dans ce mode, le paramètre eectif ne subit aucune modication de la part de la fonction
La transmission par adresse (ou par référence) :
les adresses des paramètres eectifs sont transmises à la fonction.
Dans ce mode, le paramètre eectif subit les mêmes modications que le paramètre formel lors de l'exécution de la fonction
Il existe deux modes de transmission de paramètres dans les langages de programmation :
La transmission par valeur :
les valeurs des paramètres eectifs sont aectées aux paramètres formels correspondants au moment de l'appel de la fonction.
Dans ce mode, le paramètre eectif ne subit aucune modication de la part de la fonction
La transmission par adresse (ou par référence) :
les adresses des paramètres eectifs sont transmises à la fonction.
Dans ce mode, le paramètre eectif subit les mêmes modications que le paramètre formel lors de l'exécution de la fonction
Transmission des paramètres
Il existe deux modes de transmission de paramètres dans les langages de programmation :
La transmission par valeur :
les valeurs des paramètres eectifs sont aectées aux paramètres formels correspondants au moment de l'appel de la fonction.
Dans ce mode, le paramètre eectif ne subit aucune modication de la part de la fonction
La transmission par adresse (ou par référence) :
les adresses des paramètres eectifs sont transmises à la fonction.
Dans ce mode, le paramètre eectif subit les mêmes modications que le paramètre formel lors de l'exécution de la fonction
En C, les arguments d'une fonction sont transmis par valeur. Le résultat de l'exemple:
Passage des arguments
En C, les arguments d'une fonction sont transmis par valeur. Le résultat de l'exemple:
- avant appel : 10 20 -début echange : 10 20
Explication de l'exemple:
Lors de l'appel deechange, unetransmission des valeurs denetpest eectuée.
Ces valeurs ont étérecopiées localementdans la fonctionechange dans des emplacements nommésaetb.
La fonctionechangea opérée sur ces copies, et les valeurs des variables net
pn'ont pas été modiées.
Passage par adresse en langage C:
Lorsqu'on souhaite eectuer un passage par adresse en langage C, il faudra passer l'adresse de la variable comme paramètre (&x et non pas x)
Il est donc nécessaire d'utiliserles pointeursdans la déclaration et le corps de la fonction.
Les pointeurs sont des variables qui stockent des adresses (étudiés en semestre 3)
Plan
1 Introduction
2 Règles générales
3 Prototype ou déclaration d'une fonction)
4 Passage des arguments
5 Variables globales Vs variables locales
En C, plusieurs fonctions (dont la fonction main) peuvent partager des variables communes qu'on qualie alors de variables globales.
Résultat: Bonjour 1 fois, Bonjour 2 fois, Bonjour 3 fois
Variables globales
En C, plusieurs fonctions (dont la fonction main) peuvent partager des variables communes qu'on qualie alors de variables globales.
Résultat: Bonjour 1 fois, Bonjour 2 fois, Bonjour 3 fois
Les variablesnetxsont accessibles àfct1, mais pas aumain.
Les variables globalesne sont connues du compilateurque dans la partie du code source qui suit leur déclaration. Leur portée(ou espace de validité) est limitée à la partie du code qui suit leur déclaration.
Les variables globales existent pendant toute l'exécutiondu code dans lequel elles apparaissent.
On peut déclarer des variables globales à n'importe quel endroit du code (extérieur aux fonctions). Mais, pour plus de lisibilité, il est préférable de les regrouper au début du programme source.
Ces variables sont initialisées par défaut à zéro par le compilateur.
Variables globales
Les variablesnetxsont accessibles àfct1, mais pas aumain.
Les variables globalesne sont connues du compilateurque dans la partie du code source qui suit leur déclaration. Leur portée(ou espace de validité) est limitée à la partie du code qui suit leur déclaration.
Les variables globales existent pendant toute l'exécutiondu code dans lequel elles apparaissent.
On peut déclarer des variables globales à n'importe quel endroit du code (extérieur aux fonctions). Mais, pour plus de lisibilité, il est préférable de les regrouper au début du programme source.
Ces variables sont initialisées par défaut à zéro par le compilateur.
Les variablesnetxsont accessibles àfct1, mais pas aumain.
Les variables globalesne sont connues du compilateurque dans la partie du code source qui suit leur déclaration. Leur portée(ou espace de validité) est limitée à la partie du code qui suit leur déclaration.
Les variables globales existent pendant toute l'exécutiondu code dans lequel elles apparaissent.
On peut déclarer des variables globales à n'importe quel endroit du code (extérieur aux fonctions). Mais, pour plus de lisibilité, il est préférable de les regrouper au début du programme source.
Ces variables sont initialisées par défaut à zéro par le compilateur.
Variables globales
Les variablesnetxsont accessibles àfct1, mais pas aumain.
Les variables globalesne sont connues du compilateurque dans la partie du code source qui suit leur déclaration. Leur portée(ou espace de validité) est limitée à la partie du code qui suit leur déclaration.
Les variables globales existent pendant toute l'exécutiondu code dans lequel elles apparaissent.
On peut déclarer des variables globales à n'importe quel endroit du code (extérieur aux fonctions). Mais, pour plus de lisibilité, il est préférable de les regrouper au début du programme source.
Ces variables sont initialisées par défaut à zéro par le compilateur.
Les variables dénies à l'intérieur d'une fonction (qui peut être main), sont diteslocales à la fonction dans laquelle elles sont déclarées.
La portéedes variables locales est limitée à la fonction où elles sont déclarées.
Les variables locales n'ont aucun lien avec des variables globales de même nom ou avec d'autres variables locales à d'autres fonctions.
Les variables locales
Les variables dénies à l'intérieur d'une fonction (qui peut être main), sont diteslocales à la fonction dans laquelle elles sont déclarées.
La portéedes variables locales est limitée à la fonction où elles sont déclarées.
Les variables locales n'ont aucun lien avec des variables globales de même nom ou avec d'autres variables locales à d'autres fonctions.
Les variables dénies à l'intérieur d'une fonction (qui peut être main), sont diteslocales à la fonction dans laquelle elles sont déclarées.
La portéedes variables locales est limitée à la fonction où elles sont déclarées.
Les variables locales n'ont aucun lien avec des variables globales de même nom ou avec d'autres variables locales à d'autres fonctions.
Les variables locales
Les variables dénies à l'intérieur d'une fonction (qui peut être main), sont diteslocales à la fonction dans laquelle elles sont déclarées.
La portéedes variables locales est limitée à la fonction où elles sont déclarées.
Les variables locales n'ont aucun lien avec des variables globales de même nom ou avec d'autres variables locales à d'autres fonctions.
La variable pdemainn'a aucun rapport avec la variable pdefct1.
De même, la variable ndefct1n'a aucun rapport avec la variable globale n.
Notez qu'il est alors IMPOSSIBLE, dans la
Les variables locales ont unedurée de vie limitéeà celle de l'exécution de la fonction dans laquelle elles gurent.
Leurs emplacementsne sont pas dénis de manière permanente comme ceux des variables globales.
Un nouvel espace mémoireleur est alloué à chaque entrée dans la fonction et libéré à chaque sortie. Il est donc diérent d'un appel au suivant.
Les valeurs transmises en arguments à une fonction sont traitées de la même manière que les variables locales. Leur durée de vie correspond également à celle de la fonction.
Les variables locales
Les variables locales ont unedurée de vie limitéeà celle de l'exécution de la fonction dans laquelle elles gurent.
Leurs emplacementsne sont pas dénis de manière permanente comme ceux des variables globales.
Un nouvel espace mémoireleur est alloué à chaque entrée dans la fonction et libéré à chaque sortie. Il est donc diérent d'un appel au suivant.
Les valeurs transmises en arguments à une fonction sont traitées de la même manière que les variables locales. Leur durée de vie correspond également à celle de la fonction.
Les variables locales ont unedurée de vie limitéeà celle de l'exécution de la fonction dans laquelle elles gurent.
Leurs emplacementsne sont pas dénis de manière permanente comme ceux des variables globales.
Un nouvel espace mémoireleur est alloué à chaque entrée dans la fonction et libéré à chaque sortie. Il est donc diérent d'un appel au suivant.
Les valeurs transmises en arguments à une fonction sont traitées de la même manière que les variables locales. Leur durée de vie correspond également à celle de la fonction.
Les variables locales
Les variables locales ont unedurée de vie limitéeà celle de l'exécution de la fonction dans laquelle elles gurent.
Leurs emplacementsne sont pas dénis de manière permanente comme ceux des variables globales.
Un nouvel espace mémoireleur est alloué à chaque entrée dans la fonction et libéré à chaque sortie. Il est donc diérent d'un appel au suivant.
Les valeurs transmises en arguments à une fonction sont traitées de la même manière que les variables locales. Leur durée de vie correspond également à celle de la fonction.
Il est possible d'attribuer un emplacement permanent à une variable locale pour conserver sa valeur d'un appel au suivant.
Il sut de déclarer la variable avec le mot-cléstatic.
staticsans indication de type est équivalent à static int. Résultat: appel 1, appel 2, appel 3
Les variables locales
Il est possible d'attribuer un emplacement permanent à une variable locale pour conserver sa valeur d'un appel au suivant.
Il sut de déclarer la variable avec le mot-cléstatic.
staticsans indication de type est équivalent à static int. Résultat: appel 1, appel 2, appel 3
Il est possible d'attribuer un emplacement permanent à une variable locale pour conserver sa valeur d'un appel au suivant.
Il sut de déclarer la variable avec le mot-cléstatic.
staticsans indication de type est équivalent à static int. Résultat: appel 1, appel 2, appel 3
Les variables locales
Il est possible d'attribuer un emplacement permanent à une variable locale pour conserver sa valeur d'un appel au suivant.
Il sut de déclarer la variable avec le mot-cléstatic.
staticsans indication de type est équivalent à static int. Résultat: appel 1, appel 2, appel 3
Comme pour les variables globales, les variables locales statiques sont, par défaut initialisées à zérocar le compilateur.
Les variables locales n'ont pas de valeur par défaut
Il ne faut pas confondre une variable locale statique avec une variable globale: la portée de la premièrereste toujours limitée à la fonction dans laquelle elle est dénie.
Les variables locales
Comme pour les variables globales, les variables locales statiques sont, par défaut initialisées à zérocar le compilateur.
Les variables locales n'ont pas de valeur par défaut
Il ne faut pas confondre une variable locale statique avec une variable globale: la portée de la premièrereste toujours limitée à la fonction dans laquelle elle est dénie.
Comme pour les variables globales, les variables locales statiques sont, par défaut initialisées à zérocar le compilateur.
Les variables locales n'ont pas de valeur par défaut
Il ne faut pas confondre une variable locale statique avec une variable globale: la portée de la premièrereste toujours limitée à la fonction dans laquelle elle est dénie.
Conclusion
Dans ce chapitre, nous avons étudié, en langage C:
La déclaration d'une fonction
L'utilisation d'une fonction dans un programme principal le passage des paramètres par valeur et par adresse la notion de variable locale et globale