我的一个(嵌入式)目标只有一个C89编译器。
我正致力于一个针对多个设备的(业余爱好)项目。
有没有办法将C11代码库编译(转换?)到C89?
(否则我将不得不按照1989年的字面编码。)
答案 0 :(得分:9)
不,我不认为所有C11都有可能。 C11具有C89或C99中根本不存在的功能:_Generic
,_Atomic
,_Thread
,_Alignof
,在订购前已明确定义,未命名struct
和{ {1}}成员......这些版本在旧版本中没有计数器部分,并且很难模拟。
对于这些功能中的任何一个,您都必须依赖目标编译器的扩展,因此可能对某个给定编译器的某些功能可能。但是编写这样一个将C89作为通用目标的工具将是一场噩梦。您最好直接实现C11编译器。
答案 1 :(得分:3)
正如Carl Norum评论的那样:
你的目标是什么?是否很难移植clang / llvm?
这似乎是很有前景的方法 没有必要移植目标,C89的端口就足够了。
所以clang将你的代码编译成llvm,然后llvm编译成c89,然后就可以了。