Je vois bien qu’il y a eu un débat, mais je constate cependant que la réponse
qui a été apportée à l’auteur du sujet est incomplète, malgré l’apparente
expérience de certains protagonistes… en effet, par défaut, même avec
l’option -std=c90
, le compilateur C de GNU active les extensions GNU,
et n’est donc pas strictement en conformité avec le standard.
Par exemple, le standard interdit l’arithmétique de pointeurs universels
(void*
), et l’utilisation de variable-length arrays (apparus en C99), alors
que par défaut, GCC les active en C90.
On a alors deux possibilités :
- afficher des warnings avec
-Wpedantic
pour profiter de ces extensions tout
en sachant quoi modifier pour rendre le programme portable/cachant
l’utilisation de ces extensions derrière des macros (de préprocesseur,
j’aime pas les poissons) ;
- désactiver les extensions avec
-pedantic
.
Il est possible de savoir si les extensions sont désactivées ou non par la
présence de la macro __STRICT_ANSI__
(même si ça marche de façon assez
bizarre avec -std=gnu89
par exemple, donc je déconseille l’utilisation
des "standards" dont le nom commence par "gnu").
Merci à Taurre d’avoir réouvert le sujet pour que je puisse mettre cette réponse !