Flux rss
Collection CommentCaMarche.net

Langage C++ - Les fonctions

La notion de fonction

On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du programme une série d'instructions, cela permet une simplicité du code et donc une taille de programme minimale. D'autre part, une fonction peut faire appel à elle-même, on parle alors de fonction récursive (il ne faut pas oublier de mettre une condition de sortie au risque sinon de ne pas pouvoir arrêter le programme...).

La déclaration d'une fonction

Avant d'être utilisée, une fonction doit être définie car pour l'appeler dans le corps du programme il faut que le compilateur la connaisse, c'est-à-dire qu'il connaisse son nom, ses arguments et les instructions qu'elle contient. La définition d'une fonction s'appelle « déclaration ». La déclaration d'une fonction se fait selon la syntaxe suivante :

type_de_donnee Nom_De_La_Fonction(type1 argument1, type2 argument2, ...) {
			   liste d'instructions
}

Remarques :

  • type_de_donnee représente le type de valeur que la fonction est sensée retourner (char, int, float...)
  • Si la fonction ne renvoie aucune valeur, on la fait alors précéder du mot-clé void
  • Si aucun type de donnée n'est précisé (cela est très vilain !), le type int est pris par défaut
  • Le nom de la fonction suit les mêmes règles que les noms de variables :
    • le nom doit commencer par une lettre
    • un nom de fonction peut comporter des lettres, des chiffres et les caractères _ et & (les espaces ne sont pas autorisés !)
    • le nom de la fonction, comme celui des variables est sensible à la casse (différenciation entre les minuscules et majuscules)
  • Les arguments sont facultatifs, mais s'il n'y a pas d'arguments, les parenthèses doivent rester présentes
  • Il ne faut pas oublier de refermer les accolades

  • Le nombre d'accolades ouvertes (fonction, boucles et autres structures) doit être égal au nombre d'accolades fermées !
  • La même chose s'applique pour les parenthèses, les crochets ou les guillemets !
Une fois cette étape franchie, votre fonction ne s'exécutera pas tant que l'on ne fait pas appel à elle quelque part dans la page !

Appel de fonction

Pour exécuter une fonction, il suffit de faire appel à elle en écrivant son nom (une fois de plus en respectant la casse) suivie d'une parenthèse ouverte (éventuellement des arguments) puis d'une parenthèse fermée :

Nom_De_La_Fonction();

Remarques :

  • le point-virgule signifie la fin d'une instruction et permet au navigateur de distinguer les différents blocs d'instructions
  • si jamais vous avez défini des arguments dans la déclaration de la fonction, il faudra veiller à les inclure lors de l'appel de la fonction (le même nombre d'arguments séparés par des virgules !)
    Nom_De_La_Fonction(argument1, argument2);

Prototype d'une fonction

Le prototype d'une fonction est une description d'une fonction qui est définie plus loin dans le programme. On place donc le prototype en début de programme (avant la fonction principale main()).

Cette description permet au compilateur de « vérifier » la validité de la fonction à chaque fois qu'il la rencontre dans le programme, en lui indiquant :

  • Le type de valeur renvoyée par la fonction
  • Le nom de la fonction
  • Les types d'arguments

Contrairement à la définition de la fonction, le prototype n'est pas suivi du corps de la fonction (contenant les instructions à exécuter), et ne comprend pas le nom des paramètres (seulement leur type).
Un prototype de fonction ressemble donc à ceci :

Type_de_donnee_renvoyee Nom_De_La_Fonction(type_argument1, type_argument2, ...);

Le prototype est une instruction, il est donc suivi d'un point-virgule !

Voici quelques exemples de prototypes :

void Affiche_car(char, int);

int Somme(int, int);

Le langage C++ impose qu'une fonction qui ne retourne aucune valeur soit précédée du type void !

Les arguments d'une fonction

Il est possible de passer des arguments (appelés aussi paramètres) à une fonction, c'est-à-dire lui fournir une valeur ou le nom d'une variable afin que la fonction puisse effectuer des opérations sur ces arguments ou bien grâce à ces arguments.
Le passage d'arguments à une fonction se fait au moyen d'une liste d'arguments (séparés par des virgules) entre parenthèses suivant immédiatement le nom de la fonction.

Le nombre et le type d'arguments dans la déclaration, le prototype et dans l'appel doit correspondre au risque, sinon, de générer une erreur lors de la compilation...

Un argument peut être :

  • une constante
  • une variable
  • une expression
  • une autre fonction

Valeur par défaut des arguments

Il arrive généralement que l'on ait à passer souvent une même valeur en paramètre à une fonction. Ainsi, pour simplifier les appels de fonctions comportant un paramètre qui varie peu, le langage C++ permet de déclarer des valeurs par défaut dans le prototype de la fonction, par exemple :

void fonction(int parametre1, char parametre2, float parametre3=4.5);

void main() {
char c='a';

fonction(8,c);

}

void fonction(int parametre1, char parametre2, float parametre3){
cout << parametre1 << parametre2 << parametre3;

}

(La fonction cout permet d'afficher parametre1, parametre2, et parametre3.)

  • Les paramètres par défaut doivent être les derniers de la liste, c'est-à-dire ceux le plus à droite
  • Les paramètres par défaut sont uniquement déclarés dans le prototype (et non dans sa définition)

Renvoi d'une valeur par une fonction

La fonction peut renvoyer une valeur (et donc se terminer) grâce au mot-clé return. Lorsque l'instruction return est rencontrée, la fonction évalue la valeur qui la suit, puis la renvoie au programme appelant (programme à partir duquel la fonction a été appelée).

Une fonction peut contenir plusieurs instructions return, ce sera toutefois la première instruction return rencontrée qui provoquera la fin de la fonction et le renvoi de la valeur qui la suit.

La syntaxe de l'instruction return est simple :

return valeur_ou_variable;

Le type de valeur retourné doit correspondre à celui qui a été précisé dans la définition (et le prototype)

Les fonctions inline

Le langage C++ introduit le concept de fonction inline en ajoutant le mot clé inline. Ce mot clé permet de définir des fonctions qui seront directement évaluées à la compilation, et dont l'appel dans le programme sera remplacé par la valeur évaluée.

Ce concept de pseudo-fonction était déjà possible en langage C, grâce à la directive de préprocesseur #define. Toutefois cette directive ne permettait aucun contrôle de type, ce que le mot clé inline réalise...

Voici un exemple présentant la syntaxe de l'instruction :

inline int Double(int a);

void main(){
int b = 3;

b = Double(b);

}

inline int Double(int a){
return 2*a;

}

  • Le mot clé inline est indispensable dans le prototype
  • Le mot clé inline est facultatif à la définition

La surcharge de fonction

Un des apports les plus intéressants du C++ par rapport au C, hormis l'ajout du concept objet, est la possibilité d'appeler plusieurs fonctions avec le même nom, pour peu que celle-ci aient leurs arguments différents (en type et/ou en nombre).
Ce principe est appelé surcharge de fonction. Il permet de donner le même nom à des fonctions comportant des paramètres différents et simplifie donc l'écriture de fonctions sémantiquement similaires sur des paramètres de type différent.

En effet, une fonction est déterminée par ce que l'on appelle sa signature, c'est-à-dire :

  • son nom
  • ses paramètres

Il est ainsi possible de définir une fonction réalisant la même opération sur des variables différentes en nombre ou en type :

int somme( int p1, int p2){
return (p1 + p2);

}

float somme( float p1, float p2){
return (p1 + p2);

}

float somme( float p1, float p2, float p3){
return (p1 + p2 + p3);

}

int somme( float p1, int p2){
return (int(p1) + p2);

}


Dernière modification le mardi 14 octobre 2008 à 17:40:30.
Ce document intitulé « Langage C++ - Les fonctions » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Petit programme en langage C (Résolu) Bonjour, Etantdonné débutant en langage C, permettez moi S.V.P de vous adresser mon petit probléme que je n'arrive à comprendre la réponse: l'ennoncé de l'exercie: Écrire une fonction qui ne renvoie aucune valeur et qui détermine la... www.commentcamarche.net/forum/affich-2811312-petit-programme-en-langage-c
Langage C++ - Les variables Le concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C++ sont typées, c'est-à-dire que les données contenues dans... www.commentcamarche.net/contents/cpp/cppvar.php3
Langage C pointeurs, creation de liste. (Résolu) Bonjour a tous. Voila, je rencontre quelaues petits preoblemes en langage C. Le but est de creer des fiches afin de creer une listes les contenant. Il faut ensuite afficher ce que l on a entre dans chaque fiche, puis afficher enfin le nombre de fiches... www.commentcamarche.net/forum/affich-2170245-langage-c-pointeurs-creation-de-liste
Comment fonctionne FlickrFlickr est un site Internet de partage et d’hébergement de photos gratuit, exceptées certaines fonctionnalités payantes. Flickr a été développé par Ludicorp, une société canadienne fondée en 2002. L’interface de Flickr utilise Ajax et permet de... www.commentcamarche.net/faq/sujet-14259-comment-fonctionne-flickr
Langage c: déplacement dans un répertoire (Résolu)Bonjour à tous, J'essaye de faire une barre de progression en langage C (un peu comme dans le poste de travail quand on copie des fichiers). Mais j'ai un petit soucis: comment faire pour connaitre la taille d'un répertoire (je suppose... www.commentcamarche.net/forum/affich-1702007-langage-c-deplacement-dans-un-repertoire
Programmation langage C (Résolu)Bonjour à tous, J'ai un devoir à faire en langage C et je ne vois pas comment je peux le réaliser. Il faut écrire un programme pour verifier si la chaine de caractère est un palindrome ou pas. L'énoncé de la question est la suivante : Ecrire... www.commentcamarche.net/forum/affich-2403526-programmation-langage-c
Langage C (Résolu)Bonjour, Ma question concerne l'argument de l'instruction exit du langage C. J'aimerais savoir: - est la différence entre exit (1) et exit (-1), - quels sont les autres arguments que l'on peut utiliser avec cette instruction. Merci. www.commentcamarche.net/forum/affich-3822886-langage-c
Langage C++ - Les pointeursComme en langage C, le langage C++ permet d'utiliser des pointeurs pour manipuler des données, mais il introduit aussi le concept de référence, très pratique pour permettre la modification d'une donnée passée en paramètre d'une fonction. Définition... www.commentcamarche.net/contents/cpp/cpppoint.php3
Les classes en langage C++La notion d'objet Le langage C est un langage procédural, c'est-à-dire que c'est un langage permettant de définir des données grâce à des variables, et des traitements grâce aux fonctions. L'apport principal du langage C++ par rapport au langage C... www.commentcamarche.net/contents/cpp/cppclass.php3
Langage C - Les chaînes de caractèresQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne... www.commentcamarche.net/contents/c/cstring.php3