我想深入研究macOS上C语言中函数“printf”的实现. “printf”使用 stdarg.h头文件.我打开 stdarg.h文件并发现va_list只是一个宏. 那么,我真的好奇__builtin_va_list是如何实现的?我知道它是特定于
那么,我真的好奇__builtin_va_list是如何实现的?我知道它是特定于编译器的.我在哪里可以找到__builtin_va_list的定义?我应该下载clang编译器的源代码吗?
So, I am really curious about how the __builtin_va_list is implemented?
__builtin_va_list在GCC编译器(或Clang/LLVM编译器)中实现.因此,您应该研究GCC编译器源代码以了解详细信息.
请看gcc/builtins.def& gcc/builtins.c更多.
我不熟悉Clang,它实现了相同的内置.
但是GCC和GCC都是Clang是开源或免费软件.它们是复杂的野兽(每行数百万行代码),因此您可能需要多年的工作才能理解它们.
请注意,编译器的ABI很重要.有关详细信息,请查看X86 psABI中的示例.
BTW,Grady Player评论说:
Pops the correct number of bytes off of the stack for each of those tokens…
不幸的是,今天它要复杂得多.在当前的处理器和ABI上,calling conventions确实使用processor registers来传递一些参数(而且细节中存在邪恶).
Should I download the source code of clang compiler?
是的,您还需要分配几年的工作来了解细节.
几年前,我确实编写了一些教程幻灯片和关于GCC实现的外部文档的链接,请参阅我的GCC MELT documentation页面(有点烂).