Caractéristiques du langage C

Décembre 2016

Le fichier source


Le fichier source d'un programme écrit en langage C est un simple fichier texte dont l'extension est par convention .c.

Note d'un visiteur (J.Grondin) :
L'extension est en minuscules. Le .C (majuscule) est interprété par certains compilateurs comme l'extension du C++ (gcc). Comme il existe de petites différences entre la compilation d'un programme en C et la compilation de ce même programme en C++, cela peut parfois poser des problèmes.
Ce fichier source doit être un fichier texte non formaté, c'est-à-dire un fichier texte dans sa plus simple expression, sans mise en forme particulière ou caractères spéciaux (il contient uniquement les caractères ASCII de base).


Lorsque le programme est prêt à être « essayé », il s'agit de le compiler (le traduire en langage machine).
De nombreux compilateurs C existent : sous les systèmes de type UNIX par exemple, le compilateur C est fourni en standard, si bien que la programmation en langage C est aisée sous ce type de système. La compilation sous UNIX se fait par la ligne de commande suivante :

cc fichier.c

Aspect d'un programme en C


Un programme écrit en langage C comporte une fonction principale appelée main() renfermant les instructions qui doivent être exécutées. Celles-ci sont comprises entre des accolades qui suivent le nom de la fonction. Cela vous semble tombé du ciel si vous n'avez jamais programmé en C, mais il faut admettre pour l'instant la manière d'écrire un programme en C. La finalité de cette écriture vous sera dévoilée au cours des chapitres suivants...

Un programme C de base ressemblera donc à ceci :

main() 
{ 

 printf("Ceci est votre premier programme"); 

} 

Le programme présenté ci-dessus contient donc une fonction principale main() (qui, rappelons-le, est essentielle car c'est par cette fonction que le programme s'exécute) contenant une instruction imprimant à l'écran le message « Ceci est votre premier programme » grâce à la fonction printf().

Note d'un visiteur (Emmanuel D.) :

1. Le type retourné par main() est int. La norme actuelle du C (C99) impose que le type soit explicite, il faut donc écrire :

int main()


2. Il est recommandé de définir une fonction sous sa forme prototypée. Dans ce cas, main() n'ayant pas de paramètres, on l'indique avec void.

int main(void)


3. printf() est une fonction avec un nombre variable de paramètres. Il est obligatoire de fournir un prototype à cette fonction. Il manque par exemple :

#include <stdio.h>


4. printf() produit une émission de caractères en séquence vers stdout. Certaines implémentations de stdout étant bufférisées, il est recommandé de terminer la chaîne émise par un '\n', ce qui déclenche l'émission effective. Sinon, il est possible de la forcer avec fflush(stdout) :

printf ("Ceci est votre premier programme\n");


5. Bien que la norme actuelle (C99) autorise main() à ne pas avoir de return explicite (dans ce cas on a un return 0 implicite), cette pratique est peu recommandée pour des questions de compatibilité avec la norme courante (C90) qui exige qu'une fonction retournant autre chose que void ait un return quelque chose explicite.

return 0;


Je propose :

#include <stdio.h> 

int main (void) 
{ 

printf ("Ceci est votre premier programme\n"); 

return 0; 

}

Typologie


La manière d'écrire les choses en langage C a son importance. Le langage C est par exemple sensible à la casse (en anglais case sensitive), cela signifie qu'un nom contenant des majuscules est différent du même nom écrit en minuscules. Ainsi, les spécifications du langage C précisent que la fonction principale doit être appelée main() et non Main() ou MAIN().

De la même façon, on remarquera que la fonction printf() est écrite en minuscules.
D'autre part, l'instruction printf() se termine par un point-virgule. Ce détail a son importance, car en langage C, toute instruction se termine par un point-virgule.

Ajout de commentaires


Lorsqu'un programme devient long et compliqué, il peut être intéressant (il est même conseillé) d'ajouter des lignes de commentaires dans le programme, c'est-à-dire des portions du fichier source qui ont pour but d'expliquer le fonctionnement du programme sans que le compilateur ne les prenne en compte (car il générerait une erreur).

Pour ce faire, il faut utiliser des balises qui vont permettre de délimiter les explications afin que le compilateur les ignore et passe directement à la suite du fichier.
Ces délimiteurs sont /* et */. Un commentaire sera donc noté de la façon suivante :

/*Voici un commentaire !*/


En plus des symboles /* et */, fonctionnant un peu comme des parenthèses, le symbole // permet de mettre en commentaire toute la ligne qui la suit (i.e. les caractères à droite de ce symbole sur la même ligne).

Il convient toutefois d'utiliser préférablement la notation /* */ que //, car c'est beaucoup plus joli et plus propre. La notation // est généralement réservée pour mettre en commentaire une ligne de code que l'on souhaite désactiver temporairement.

Il y a toutefois quelques règles à respecter :
  • Les commentaires peuvent être placés n'importe où dans le fichier source
  • Les commentaires ne peuvent contenir le délimiteur de fin de commentaire (*/)
  • Les commentaires ne peuvent être imbriqués
  • Les commentaires peuvent être écrits sur plusieurs lignes
  • Les commentaires ne peuvent pas couper un mot du programme en deux

A voir également :

Ce document intitulé «  Caractéristiques du langage C  » issu de CommentCaMarche (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.