C99
En 1999, le C a connu une évolution majeure. Ce C a un aspect différent du C Ansi .
La nouveuté la plus remarquable est que les variables automatiques ont une portée liée au bloc ou à l’instruction de contrôle où elles sont définies, on n’est plus obligé de déclarer toutes les variables en tête de fonction.
De sorte le programme ANSI C suivant
#include <stdio.h>
int main() {
int i, j;
int a ;
a = 42;
if(a == 42) {
for(i = 0 ; i < a ; i++) {
for(j = 0; j < 3 ; j++) {
printf("%d", a);
}
}
}
}
Peut être réecrit ainsi en C99
#include <stdio.h>
int main() {
int a = 42;
if(a == 42) { // A noter qu'en C++17 on peut écrire if(int a = 42; a == 42) {}
for(int i = 0 ; i < a ; i++) {
for(int j = 0; j < 3 ; j++) {
printf("%d", a);
}
}
}
}
Incompatibilités avec le C++
Le C ANSI avait déjà quelques incompatibilités avec le C++, le C99 en a apporté de nombreuses nouvelles, que même le C++23 n’a pas comblé, en particulier les pointeurs restrict ou les valeurs aggrégées .