我的一个(嵌入式)目标只有一个 C89 编译器。
我正在开发一个针对多个设备的(爱好)项目。
有没有办法将 C11 代码库编译(转译?)成 C89?
(否则我将不得不像 1989 年那样编写代码。)
不,我不认为所有 C11 都有可能。C11 具有在 C89 或 C99 中根本不存在的功能:_Generic
, _Atomic
, _Thread
, _Alignof
, 定义良好的排序前排序,未命名struct
和union
成员......这些在旧版本中没有对应部分,并且真的很难模仿。
对于这些功能中的任何一个,您都必须依赖目标编译器的扩展,因此对于一个给定编译器的某些功能可能是可行的。但是编写这样一个将纯 C89 作为通用目标的工具将是一场噩梦。你最好直接实现一个C11编译器。
正如卡尔·诺鲁姆所说:
你的目标是什么?移植 clang/llvm 会很困难吗?
这似乎是有前途的方法。
不需要移植您的目标,C89 的移植就足够了。
因此,clang 将您的代码编译为 llvm,然后将 llvm 编译为 c89,然后您就得到了。