UN fonction définie par l'utilisateur est un type de fonction en langage C défini par l'utilisateur lui-même pour effectuer une tâche spécifique. Il offre la réutilisabilité du code et la modularité à notre programme. Les fonctions définies par l'utilisateur sont différentes des fonctions intégrées car leur fonctionnement est spécifié par l'utilisateur et aucun fichier d'en-tête n'est requis pour leur utilisation.
Dans cet article, nous découvrirons fonction définie par l'utilisateur, prototype de fonction, définition de fonction, appel de fonction et différentes manières de transmettre des paramètres à une fonction.
Comment utiliser les fonctions définies par l'utilisateur en C ?
Pour utiliser une fonction définie par l'utilisateur, nous devons d'abord comprendre les différentes parties de sa syntaxe. La fonction définie par l'utilisateur en C peut être divisée en trois parties :
- Fonction Prototype
- Définition de la fonction
- Appel de fonction
Prototype de fonction C
Un prototype de fonction est également appelé déclaration de fonction qui spécifie le le nom de la fonction, les paramètres de la fonction, et type de retour . Le prototype de fonction ne contient pas le corps de la fonction. Il est essentiellement utilisé pour informer le compilateur de l'existence de la fonction définie par l'utilisateur qui peut être utilisée dans la partie ultérieure du programme.
Syntaxe
return_type function_name (type1 arg1 , type2 arg2 , ... typeN argN );>
Nous pouvons également ignorer le nom des arguments dans le prototype de la fonction. Donc,
return_type function_name (type1 , type2 , ... typeN);>

Définition de la fonction C
Une fois la fonction appelée, la définition de la fonction contient les instructions réelles qui seront exécutées. Toutes les instructions de la définition de fonction sont entourées { } croisillons.
Syntaxe
return_type function_name (type1 arg1 , type2 arg2 .... typeN argN ) { // actual statements to be executed // return value if any }>
Note: Si l'appel de fonction est présent après la définition de la fonction, nous pouvons ignorer la partie prototype de la fonction et définir directement la fonction.
Appel de fonction C
Afin de transférer le contrôle à une fonction définie par l'utilisateur, nous devons l'appeler. Les fonctions sont appelées en utilisant leurs noms suivis de parenthèses. Leurs arguments sont passés entre parenthèses.
Syntaxe
function_name(arg1, arg2, ... argN);>
Exemple de fonction définie par l'utilisateur
Le programme C suivant illustre comment utiliser les fonctions définies par l'utilisateur dans notre programme.
C
// C Program to illustrate the use of user-defined function> #include> // Function prototype> int> sum(> int> ,> int> );> // Function definition> int> sum(> int> x,> int> y)> {> > int> sum;> > sum = x + y;> > return> x + y;> }> // Driver code> int> main()> {> > int> x = 10, y = 11;> > // Function call> > int> result = sum(x, y);> > printf> (> 'Sum of %d and %d = %d '> , x, y, result);> > return> 0;> }> |
>
>Sortir
Sum of 10 and 11 = 21>
Composants de la définition de fonction
Il y a trois composants dans la définition de fonction :
- Paramètres de fonction
- Corps de fonction
- Valeur de retour
1. Paramètres de fonction
Les paramètres de fonction (également appelés arguments) sont les valeurs transmises à la fonction appelée par l'appelant. Nous pouvons transmettre aucun ou un certain nombre de paramètres de fonction à la fonction.
Nous devons définir le nom de la fonction et son type dans la définition de la fonction et nous ne pouvons transmettre que le même nombre et le même type de paramètres dans l'appel de fonction.
Exemple
int foo ( int a, int b) ;>
Ici, un et b sont des paramètres de fonction.
Note: Le langage C fournit une méthode grâce à laquelle nous pouvons transmettre un nombre variable d’arguments à la fonction. De telles fonctions sont appelées fonction variadique.
qu'est-ce que maven
2. Corps fonctionnel
Le corps de la fonction est l'ensemble des instructions placées entre accolades { }. Ce sont les instructions qui sont exécutées lorsque la fonction est appelée.
Exemple
int foo (int a, int b) { int sum = a + b; return sum; }>
Ici, les déclarations entre { et } est un corps fonctionnel.
3. Valeur de retour
La valeur de retour est la valeur renvoyée par la fonction à son appelant. Une fonction ne peut renvoyer qu’une seule valeur et elle est facultative. Si aucune valeur ne doit être renvoyée, le type de retour est défini comme void.
Le renvoyer le mot-clé est utilisé pour renvoyer la valeur d’une fonction.
Syntaxe
return ( expression );>
Exemple
int foo (int a, int b) { return a + b; }>
Note: Nous pouvons utiliser des pointeurs ou des structures pour renvoyer plusieurs valeurs d'une fonction en C .
Passer des paramètres aux fonctions définies par l'utilisateur
Nous pouvons passer des paramètres à une fonction en C en utilisant deux méthodes :
- Appel par valeur
- Appel par référence
1. Appel par valeur
Dans l'appel par valeur, une copie de la valeur est transmise à la fonction et les modifications apportées à la fonction ne sont pas répercutées sur les valeurs. Les arguments réels et formels sont créés dans différents emplacements mémoire.
Exemple
C
// C program to show use of> // call by value> #include> void> swap(> int> a,> int> b)> {> > int> temp = a;> > a = b;> > b = temp;> }> // Driver code> int> main()> {> > int> x = 10, y = 20;> > printf> (> 'Values of x and y before swap are: %d, %d
'> , x,> > y);> > swap(x, y);> > printf> (> 'Values of x and y after swap are: %d, %d'> , x,> > y);> > return> 0;> }> |
>
>Sortir
Values of x and y before swap are: 10, 20 Values of x and y after swap are: 10, 20>
Note: Les valeurs ne sont pas modifiées lors de l’appel par valeur puisqu’elles ne sont pas transmises par référence.
2. Appel par référence
Dans un appel par référence, l'adresse de l'argument est transmise à la fonction et les modifications apportées à la fonction sont reflétées dans les valeurs. Nous utilisons le pointeurs du type requis pour recevoir l'adresse dans la fonction.
Exemple
C
// C program to implement> // Call by Reference> #include> void> swap(> int> * a,> int> * b)> {> > int> temp = *a;> > *a = *b;> > *b = temp;> }> // Driver code> int> main()> {> > int> x = 10, y = 20;> > printf> (> 'Values of x and y before swap are: %d, %d
'> , x,> > y);> > swap(&x, &y);> > printf> (> 'Values of x and y after swap are: %d, %d'> , x,> > y);> > return> 0;> }> |
>
>Sortir
Values of x and y before swap are: 10, 20 Values of x and y after swap are: 20, 10>
Pour plus de détails, reportez-vous à cet article – Différence entre appel par valeur et appel par référence
Avantages des fonctions définies par l'utilisateur
Les avantages de l'utilisation des fonctions dans le programme sont les suivants :
- On peut éviter la duplication de code dans les programmes en utilisant des fonctions. Le code peut être écrit plus rapidement et être ainsi plus lisible.
- Le code peut être divisé et conquis à l'aide de fonctions. Ce processus est connu sous le nom de Diviser pour régner. Il est difficile d'écrire de grandes quantités de code dans la fonction principale, ainsi que de tester et de déboguer. Notre tâche peut être divisée en plusieurs sous-tâches plus petites en utilisant des fonctions, réduisant ainsi la complexité globale.
- Par exemple, lorsqu'on utilise pow, sqrt, etc. en C sans savoir comment il est implémenté, on peut masquer les détails d'implémentation avec des fonctions.
- Avec peu ou pas de modifications, les fonctions développées dans un programme peuvent être utilisées dans un autre, réduisant ainsi le temps de développement.