Est-il possible de comstackr C11 à C89?

Une de mes cibles (intégrées) ne dispose que d’un compilateur C89.

Je travaille sur un projet (hobby) qui cible plusieurs appareils.

Existe-t-il un moyen de comstackr (transstackr?) Une base de code C11 en C89?

(Sinon, je devrai coder comme en 1989, littéralement.)

Non, je ne pense pas que ce soit possible pour tout le C11. C11 a des fonctionnalités qui n’existent tout simplement pas dans C89 ou C99: _Generic , _Atomic , _Thread , _Alignof , séquence bien définie avant de commander, membres de struct et union non nommés … Celles-ci n’ont pas de contreparties dans les versions antérieures et seraient vraiment difficiles imiter .

Pour l’une ou l’autre de ces fonctionnalités, vous devrez vous appuyer sur des extensions de votre compilateur cible, ce qui est probablement possible pour certaines des fonctionnalités d’un compilateur donné. Mais ce serait un cauchemar d’écrire un tel outil qui aurait comme objective générique le C89. Vous feriez mieux de mettre en œuvre directement un compilateur C11.

Comme le commente Carl Norum:

Quelle est votre cible? Serait-il difficile de porter clang / llvm?

Cela semble être une approche prometteuse.
Il n’est pas nécessaire de porter votre cible, un port pour C89 suffit.

Alors, clang comstack votre code en llvm, puis llvm en c89 et vous l’obtenez.