Les composants élémentaires du C
Un programme en langage C est constitué des six groupes de composants élémentaires suivants :
• les identificateurs,
• les mots-clefs,
• les constantes,
• les chaînes de caractères,
• les opérateurs,
• les signes de ponctuation.
On peut ajouter à ces six groupes les commentaires, qui sont enlevés par le préprocesseur.
Les identificateurs
Le rôle d’un identificateur est de donner un nom à une entité du programme. Plus précisément, un identificateur peut désigner :
• un nom de variable ou de fonction,
• un type défini par typedef, struct, union ou enum,
• une étiquette (ou label).
Un identificateur est une suite de caractères parmi :
• les lettres (minuscules ou majuscules, mais non accentuées),
• les chiffres (sauf pour le premier caractère),
• le « blanc souligné » ou « underscore » : « _ ».
! Le langage C est « case sensitive » (tient compte des majuscules/minuscules).
Exemples : var1, type_2 ou _deb sont des identificateurs valides.
Remarque : Il est déconseillé d’utiliser le underscore « _ » comme premier caractère d’un identificateur. En effet, par convention, il est souvent employé pour définir les variables globales de l’environnement C (prédéfinies par le compilateur).
Si la norme n’impose rien, pour éviter des surprises avec certains compilateurs, il est conseillé d’éviter de créer des identificateurs de plus de 31 caractères.
Les mots-clefs
Un certain nombre de mots, appelés mots-clefs, sont réservés pour le langage lui-même et ne peuvent pas être utilisés comme identificateurs. L’ANSI C compte 32 mots clefs :
auto break case char
const continue default do
double else enum extern
float for goto if
int long register return
short signed sizeof static
struct switch typedef union
unsigned void volatile while
que l’on peut ranger en catégories :
• les spécificateurs de stockage : auto, register, static, extern, typedef ;
• les spécificateurs de type : char, double, enum, float, int, long, short, signed, struct, union, unsigned, void ;
• les qualificateurs de type : const, volatile ;
• les instructions de contrôle : break, case, continue, default, do, else, for, goto, if, switch, while ;
• divers : return, sizeof.
Les commentaires
Un commentaire débute par /* et se termine par */. Par exemple :
/* Ceci est un commentaire */
On ne peut pas imbriquer des commentaires. Les compilateurs acceptent de plus en plus souvent les commentaires à la façon C++ : le commentaire commence par un double « / », et se continue jusqu’à la fin de la ligne. Exemple :
Ceci n’est pas un commentaire ; // Ceci est un commentaire
4.4 Structure d’un programme C
Une expression est une suite de composants élémentaires syntaxiquement correcte, par exemple :
x = y + 4 ou bien (i >= 0) && (i < 10) || (p[i] != 0)
Une instruction est une expression suivie d’un point-virgule. Le point-virgule est donc le « séparateur d’instruction » ; il signifie en quelque sorte « évaluer cette expression ».Plusieurs instructions peuvent être rassemblées par des accolades { et } pour former une instruction composée ou bloc qui est syntaxiquement équivalent à une instruction (le « { » signifie « début de bloc », ou « begin » dans d’autres langages comme le Pascal), et « } » signifie « fin de bloc » – le « end » – dans certains langages). Par exemple :
if (x != 0)
{ z = y / x;
t = y % x;
}
Une instruction composée d’un spécificateur de type et d’un identificateur ou d’une liste d’identificateurs séparés par une virgule est une déclaration. Par exemple :
int a;
int b = 1, c;
double x = 2.38e4;
La déclaration d’un tableau se fait avec les accolades. Exemple :
int b[10] ;
/* déclare un tableau b de 10 entiers. Le premier élément du tableau sera b[0], et le 10ième et dernier sera b[9] */
Remarque : en C, nous ne pouvons définir que des tableaux de taille connue lors de la compilation. Par exemple, le code suivant est interdit :
int a=f() ; /* la variable a est initialisée avec le résultat de l’appel à la fonction f() */
int b[a] ; /* à la compilation, la valeur de « a » est inconnue ; cette ligne engendrera une erreur de la part du compilateur */
/* Par contre, la ligne suivante est correcte : */
int c[4*4+1] ;
Important : en C, toute variable doit faire l’objet d’une déclaration avant d’être utilisée.
Typiquement, un programme C se présente de la façon suivante :
[directives au préprocesseur]
[déclarations de variables externes]
[fonctions secondaires]
main()
{
déclarations de variables internes
instructions
}