我不认为将C11全部转换为C89或C99是可能的。因为C11有一些在C89或C99中并不存在的特性:_Generic、_Atomic、_Thread、_Alignof、定义良好的顺序和匿名结构和联合成员...这些在旧版本中没有对应的特性,如果要模拟实现,会非常困难。对于任何这些功能,您必须依赖目标编译器的扩展,在某个给定编译器中某些特性可能是可能的。但是编写这样的工具会是一场噩梦,如果你想让你的通用目标是C89,你最好直接实现一个C11编译器。
作为卡尔·诺鲁姆的评论:“你的目标是什么?将clang / llvm移植过来难吗?”这似乎是一个有前途的方法。 不需要为您的目标进行移植,C89的移植就足够了。因此,clang将您的代码编译为llvm,然后将llvm编译为c89,然后您就可以得到它。