当前位置 : 主页 > 编程语言 > c++ >

c – 如何实施“__builtin_va_list”?

来源:互联网 收集:自由互联 发布时间:2021-06-23
我想深入研究macOS上C语言中函数“printf”的实现. “printf”使用 stdarg.h头文件.我打开 stdarg.h文件并发现va_list只是一个宏. 那么,我真的好奇__builtin_va_list是如何实现的?我知道它是特定于
我想深入研究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和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页面(有点烂).

网友评论