Les erreurs les plus facilement détectées par un compilateur, qui sont aussi les plus fréquemment commises par les débutants, sont les erreurs de syntaxe, ou de grammaire si vous préférez. Le langage C++ obéit en effet à une grammaire très stricte, et le compilateur est programmé pour refuser tout texte qui viole cette grammaire.
Il suffit que votre programme comporte une seule faute de syntaxe pour que le compilateur refuse de générer du code exécutable. Par contre, il traitera si possible l'ensemble de votre texte pour détecter le maximum d'erreurs, qu'il vous signale par des messages.
Ce que vous dira le compilateur dans ses messages n'est pas toujours l'explication de la cause de l'erreur, mais plutôt sa manifestation au plus bas niveau. Prenons par exemple le fragment de code suivant :
typedef int Entier void main() {
Notre diagnostic serait de dire qu'un point virgule (semicolon)
a été omis à la fin de la première ligne,
mais le compilateur, dans sa lecture séquentielle des
symboles, verra l'erreur à un autre niveau.
Il faudra qu'il rencontre le symbole "{
" pour s'apercevoir de l'erreur :
CC: "ex1.cpp", line 4: error: syntax error (1502)
Donc, le numéro de ligne qui accompagne le message ne donne pas forcément
l'emplacement où devra porter la correction,
mais plutôt l'endroit où l'erreur a pu être détectée
par le compilateur. Si la ligne désignée est correcte,
il faudra alors regarder la ligne précédente (ne manque-t-il pas un
point-virgule ?), puis éventuellement ``remonter'' dans le programme
jusqu'au début de la structure dont la construction a été jugée
erronée. Certaines structures occupant couramment de nombreuses lignes
(blocs {...}
, structures if...else
, etc.),
il peut être nécessaire de remonter assez loin.