C-- est, si l’on excepte la notion d’exception, un sous-ensemble
extrêmement réduit du langage C. Ont été supprimés de C: tous les
types struct, union,
enum, ainsi que les tableaux, et la plupart
des types scalaires. En fait, il ne reste que les types
int, char *, et les
pointeurs sur les types C-- (récursivement).
L’avantage est que tous ces types tiennent sur 32 bits. Vous n’aurez donc pas à vous casser la tête pour savoir combien de place allouer à chaque variable: ce sera toujours 4 octets.
Ensuite, de nombreuses constructions de C ont été supprimées, mais pas suffisamment pour ne pas pouvoir compiler des programmes intéressants.
En principe, C-- est un sous-ensemble de C, ce qui signifie que vous
pourrez tester mcc en comparant les
programmes qu’il produit avec ceux produits par
gcc.
Il n’y a que deux exceptions à ce principe. La première est l’ajout à
C--, par rapport à C, des exceptions, c’est-à-dire des constructions
throw et
try…catch…finally.
La seconde est l’arithmétique sur les pointeurs, qui a une sémantique
différente en C-- et en C. Si vous déclarez
int *p et écrivez p++
en C, ceci ajoute sizeof(int), soit 4, à
l’adresse p. En C–, ça n’est censé
qu’ajouter un. Je doute que vous ayez à considérer ce genre de
subtilités, mais qui sait.