c – 如何实施“__builtin_va_list”?
我想深入研究macOS上C语言中函数“printf”的实现. “printf”使用< stdarg.h>头文件.我打开< stdarg.h>文件并发现va_list只是一个宏.
那么,我真的好奇__builtin_va_list是如何实现的?我知道它是特定于编译器的.我在哪里可以找到__builtin_va_list的定义?我应该下载clang编译器的源代码吗? 解决方法
__builtin_va_list在GCC编译器(或Clang/LLVM编译器)中实现.因此,您应该研究GCC编译器源代码以了解详细信息. 请看gcc/builtins.def& gcc/builtins.c更多. 我不熟悉Clang,它实现了相同的内置. 但是GCC和GCC都是Clang是开源或免费软件.它们是复杂的野兽(每行数百万行代码),因此您可能需要多年的工作才能理解它们. 请注意,编译器的ABI很重要.有关详细信息,请查看X86 psABI中的示例. BTW,Grady Player评论说:
不幸的是,今天它要复杂得多.在当前的处理器和ABI上,calling conventions确实使用processor registers来传递一些参数(而且细节中存在邪恶).
是的,您还需要分配几年的工作来了解细节. 几年前,我确实编写了一些教程幻灯片和关于GCC实现的外部文档的链接,请参阅我的GCC MELT documentation页面(有点烂). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |