Type : organisation du programme
Syntaxe :
type_var_retour nom_fonction( liste de paramètres typés )
{ zone de déclaration de variables locales ;
séquence d'instructions ;
return valeur_typée ;
}
Action : crée un bloc d'instructions autonome et portable
Remarques :
- Une fonction sert à organiser un programme de façon à le rendre synthétique et à simplifier la compréhension de l'algorithme mis en œuvre.
- On a intérêt à écrire une fonction :
- lorsque l'on sait que l'algorithmique sera répétée plusieurs fois dans le programme
- ou sera mise en œuvre dans d'autres programmes (réutilisation du code)
- Les variables déclarées dans la fonction, appelées variables locales, n'existent qu’à l'intérieur de la fonction : entre les accolades { }.
Elles ne sont pas accessibles depuis l'extérieur de la fonction. - On lance l'exécution d'une fonction en l'appelant par son nom et en renseignant la liste complète des paramètres de celle-ci en respectant les types imposés.
- Les paramètres d’une fonction sont des variables locales à la fonction initialisés lors de son appel.
- Une fonction retourne une valeur pas une variable.
L'expression contenue dans un return est donc interprétée pour calculer sa valeur et c'est cette valeur qui est retournée. - Une fonction peut être de type void, c'est à dire que la fonction ne retourne rien (elle effectue un affichage par exemple).
Dans ce cas la fonction ne comporte pas d'instruction return. - Une fonction peut n'avoir aucun paramètre, auquel cas, la liste des paramètres est void.
- Une fonction retourne une valeur du type déclaré : on ne peut lui affecter une valeur. Par conséquent on ne trouve jamais un appel à une fonction à gauche d'un signe égal.
Une fonction n’est pas une Lvalue ! - main() est une fonction comme les autres.
Toutefois la norme veut que la fonctions main() soit de type int. Nous imposons ici (et c’est une entorse à la règle !) qu’elles n’aient pas de paramètre d'entrée soit : int main( void )
Exemples :
1/ Calcule et retourne le carré du paramètre x.
float carre( float x)
{ return x*x ;// noter le calcul dans le return…
}
C’est bien une valeur qui est retournée...
2/ Calcule et affiche le carré du paramètre x.
void carre(float x)
{ printf( "Le carre de %f est %f \n", x, x*x ) ;
}
La fonction est de type void. il n’y a pas de return.
3/ Calcule et affiche z^(y-x) si y>x, 1 sinon.
float calcul( int x, int y, float z)
{ int i ;
float P;
for ( i=x , P=1 ; i<y ; i++)
P = P*z;
return P;
}
Pour plus d’explications sur le for, reportez-vous à sa fiche.
4/ Appel de la fonction calcul
int main(void)
{ float res ;
res = calcul( 3, 7, 1.2 ); /* calcule 1.2 ^( 7-3) */
…
return 0;
}