18

我的一个(嵌入式)目标只有一个 C89 编译器。

我正在开发一个针对多个设备的(爱好)项目。

有没有办法将 C11 代码库编译(转译?)成 C89?

(否则我将不得不像 1989 年那样编写代码。)

4

2 回答 2

9

不,我不认为所有 C11 都有可能。C11 具有在 C89 或 C99 中根本不存在的功能:_Generic, _Atomic, _Thread, _Alignof, 定义良好的排序前排序,未命名structunion成员......这些在旧版本中没有对应部分,并且真的很难模仿

对于这些功能中的任何一个,您都必须依赖目标编译器的扩展,因此对于一个给定编译器的某些功能可能是可行的。但是编写这样一个将纯 C89 作为通用目标的工具将是一场噩梦。你最好直接实现一个C11编译器。

于 2013-10-01T20:10:18.803 回答
3

正如卡尔·诺鲁姆所说:

你的目标是什么?移植 clang/llvm 会很困难吗?

这似乎是有前途的方法。
不需要移植您的目标,C89 的移植就足够了。

因此,clang 将您的代码编译为 llvm,然后将 llvm 编译为 c89,然后您就得到了。

于 2013-10-02T07:44:41.287 回答