Fonctions

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;
}


L3 EEA & ISS 2019-21 / p. castelan