11.9.5.1 : Choix du compilateur
Il existe de nombreux compilateurs comme GCC/G++[72]Gnu C Compiler and Gnu C++ Compiler - GCC/G++, GNU ou CLang/CLang++[73]Clang: a C language family frontend for LLVM, LLVM qui ont tous de nombreuses versions.
Classiquement, une version est choisie et fixée jusqu'à la fin du projet. Cela permet théoriquement de garantir que les résultats seront cohérents ou du moins compatibles entre eux.
Une méthode diamétralement opposée permet d'obtenir une bien meilleure confiance dans la qualité des résultats et du programme développé.
Elle consiste à utiliser plusieurs versions de plusieurs compilateurs différents et à vérifier que les résultats sont compatibles entre eux. Par exemple, GCC 7.2, GCC 8.3, GCC 9.3 et CLang 9.0, CLang 10.0.
Utiliser différentes versions d'un même compilateur permet de s'assurer que les différentes passes d'optimisations donnent les mêmes résultats (si ce n'est pas le cas, il y a très probablement un problème dans le programme lui-même et non dans les compilateurs qui sont des programmes extrêmement suivis et surveillés par la communauté des développeurs).
Utiliser plusieurs compilateurs différents permet de s'assurer qu'aucune maladresse n'a échappée au premier compilateur (comme l'omission d'une paire d'accolades ou l'utilisation du mauvais indice pour accéder aux valeurs d'un tableau).
Quel que soit le compilateur utilisé, il est indispensable d'activer tous les avertissements (warnings) avec l'option \optionCompilation-Wall car ils portent un regard critique sur le travail du développeur, et de transformer les avertissements en erreurs avec l'option \optionCompilation-Werror afin d'éviter qu'un flot d'avertissements masque la lecture d'un avertissement critique pour la pertinence du programme.