我想深入研究 macOS 上 C 中函数“printf”的实现。 “printf”使用 <stdarg.h>
头文件。我打开<stdarg.h>
文件并找到 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 和 Clang 都是开源或免费软件。它们是复杂的怪兽(每个都有数百万行代码),因此您可能需要多年的工作才能理解它们。
请注意 ABI你的编译器很重要。例如在 X86 psABI 中查找了解更多详情。
顺便说一句,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页面(有点烂)。
关于c - "__builtin_va_list"是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49733154/