modifié le

Les bases

1. Structure d’un programme C

/* exemple de programme élémentaire */ (1)

#include <stdio.h>	(2)

// fonction principale (3)
int main()	(4)
{
  printf("Hello World !") ;	// écrire sur la sortie standard (5)
  return 0 ;	              // 0 signifie OK (6)
}
1 format historique des commentaires
2 directive préprocesseur visant à déclarer la fonction printf
3 autre forme de commentaire
4 main est le point d’entrée de tout programme C
5 appel à la fonction printf de la bibliothèque standard C (libc)
6 terminaison de l’exécution et renvoi d’un code de retour à l’OS

La commande Unix man permet d’obtenir des explications sur l’utilisation d’une fonction C, par exemple pour printf :

$ man 3 printf

2. Compiler un programme

$ cc -Wall -o prog prog.c  # génère l'exécutable prog à partir de prog.c
$ ./prog                   # exécute prog

Pour obtenir des explications sur l’utilisation de la commande cc, faire :

$ man cc

Récupérer le code de retour d’une exécution avec la variable shell $? :

$ ./prog
$ echo $?

Utiliser le code de retour comme une condition :

$ ./prog && echo "l'exécution s'est bien passée"
$ ./prog || echo "fin anormale, le programme a renvoyé $?"

3. Structures de contrôle

3.1. Instruction itérative for

// calcule 1+2+3+ ... +n avec for

#include <stdio.h>

int main()
{
  int S=0, i, n ;

  scanf("%d",&n) ;

  for (i=1 ; i<=n ; i++)
    S += i ;

  printf("S=%d\n",S) ;
  return 0 ;
}

3.2. Instruction itérative while

/* même chose avec while */

i = 1 ;
while (i<=n)
{
  S += i ;
  i++ ;
}

3.3. Instruction itérative do while

/* même chose avec do while */

i = 0 ;
do {
     i++ ;
     S += i ;
} while (i<=n) ;

Modifier le programme ci-dessus de façon à écrire les sommes partielles à chaque tour de boucle.

3.4. Instruction conditionnelle if

#include <stdio.h>
#include <math.h>	// pour déclarer sqrt

#define PR "premier"

int main()
{
  int i=2, n ;

  printf("entrez un entier >2 : ") ;
  scanf("%d",&n) ;

  while (n%i!=0 && i<=sqrt(n)) i++ ;

  if (n%i!=0)
    printf("%d est %s\n",n,PR) ;
  else
    printf("%d n'est pas %s\n",n,PR) ;

  return 0 ;
}

Que fait le programme ci-dessus ? Le compiler et l’exécuter.

.Éléments de réponse

Pour obtenir un exécutable, il est nécessaire d’inclure la bibliothèque mathématique à l’édition des liens :

cc -Wall -o premier premier.c -lm

3.5. Instruction alternative switch

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

4. Types scalaires prédéfinis

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

5. Opérateurs

opérateurs arithmétiques

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

opérateur conditionnel

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

opérateurs de manipulation de bits

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

cast

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

6. Quelques fonctions d’E/S

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

7. Automatiser les compilations

La commande make permet de lancer les compilations suivant un ensemble de règles définies dans un fichier makefile ou Makefile situé dans le répertoire courant.

fichier Makefile
%: %.c                             (1)
<tabulation> gcc -Wall -o $@ $@.c  (2)
1 ceci est une règle de dépendance qui signifie : tout binaire dépend du fichier .c de même nom. A gauche du signe :, on a la cible, et à droite, ses dépendances
2 ceci est une action pour mettre à jour la cible

L’ensemble forme un bloc qui signifie : "tout binaire dépend du fichier .c de même nom, et s’obtient avec la commande gcc indiquée".

  • il peut y avoir autant de ligne d’action que l’on veut

  • la règle de dépendance et les lignes d’action doivent se suivre, sans ligne vide

  • une ligne de dépendance commence en colonne 1

  • une ligne d’action commence par une tabulation

  • on peut mettre autant de bloc que l’on veut dans un fichier Makefile

Ce Makefile permet de compiler tout programme prog.c avec la commande make prog. Il est possible d’ajouter des exceptions pour les programmes qui ne se compilent pas avec la commande indiquée :

fichier Makefile
# règle implicite
%: %.c
    gcc -Wall -o $@ $@.c    (1)

# règles spécifiques
premier: premier.c
    gcc -Wall -o $@ $@.c -lm
1 $@ représente la cible des dépendances (donc ici l’exécutable)