加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何实施“__builtin_va_list”?

发布时间:2020-12-16 09:20:27 所属栏目:百科 来源:网络整理
导读:我想深入研究macOS上C语言中函数“printf”的实现. “printf”使用 stdarg.h头文件.我打开 stdarg.h文件并发现va_list只是一个宏. 那么,我真的好奇__builtin_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页面(有点烂).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读