【发布时间】:2009-05-01 11:18:35
【问题描述】:
如果我想修改或添加我自己的 C 扩展,并将它们添加到 GCC C 编译器,我需要做什么?我不想提议对语言进行更改,我想知道 C 编译器实际上是如何工作的。
我查看了 GCC 的源代码,它看起来好像 Objective-C 被实现为一个简单的解析器,它生成引用修改后的运行时库的代码,然后引用所有基于 C 的它使用常规的 C 编译器。我没有深入研究它,所以我可能没有走在正确的轨道上。
例如,我想在 Objective-C 中添加我自己的关键字,只是为了好玩。我想添加一些看起来很容易实现的东西,比如@assert。我只想让@assert 调用一个我将添加到Objective-C 运行时的函数:
objc_runtime_assert (__FILE__, __LINE__, expression, "string version of expression");
显然我可以将其实现为函数调用和宏,但我想了解 C 源代码的解析和编译阶段,也许我可以将自己的扩展添加到我自己使用的语言中.
我查看的源代码一直提到“树”,并且有很多很多宏可以执行操作或从这些树中获取信息。
是否有任何文档可以深入解释这类事情?
【问题讨论】:
-
如果你想破解编译器,尤其是 Objective-C,你应该看看 LLVM。 Apple 转向 LLVM 的部分原因是它比 GCC 更容易修改和扩展,并且代码库更简洁。
标签: c objective-c gcc language-design objective-c-runtime