Considérons le programme ci-dessous :
#include <stdio.h>
void affiche_calcul(float,float); /* prototype */
float produit(float,float);
int varglob;
int main(void)
{
float a,b; /* déclaration locale */
varglob=0;
puts("veuillez entrer 2 valeurs");
scanf("%f %f",&a,&b);
affiche_calcul(a,b);
printf("nombre d'appels à produit : %d\n",varglob);
}
float produit(float r, float s)
{
varglob++;
return(r*s);
}
void affiche_calcul(float x,float y)
{
float varloc;
varloc=produit(x,y);
varloc=produit(varloc,varloc);
printf("le carré du produit est %f\n",varloc);
}
Un programme C est composé (voir le schéma complet) :
de directivess du pré-processeur, commençant par #, terminées par un retour à la ligne (pas de
. Dans l'exemple il y en a une.
de déclarations globales (terminées par un
. Ici on en a trois, deux prototypes et une variable globale.
d'une suite de fonctions, écrites les unes après les autres (sans imbrication comme on le ferait en Pascal). Ici il y en a 3 : main, produit et affiche_calcul.
Les fonctions (détaillées plus loin) sont écrites sous la forme : entête { corps }
L'entête est de la forme : type_résultat nom (arguments) . Le type_résultat n'était obligatoire (avant la norme ANSI) que s'il était différent de int (entier). Il doit désormais être void (rien) si la fonction ne renvoie rien (dans un autre langage on l'aurait alors appelé sous-programme, procédure, ou sous-routine). Les arguments, s'ils existent, sont passés par valeur. Si la fonction ne nécessite aucun argument, il faut indiquer (void) d'après la norme ANSI, ou du moins ().
Le corps est composé de déclarations de variables locales, et d'instructions