Gcc 在哪里定义了uuu内置u va_u起点?

Gcc 在哪里定义了uuu内置u va_u起点?,gcc,glibc,Gcc,Glibc,我试图找到在GCC的源代码中定义了\uuu builtin\u va\u start的位置,并了解它是如何实现的。(我在寻找定义了va_start的地方,然后发现这个宏被定义为\u builtin\u va_start)我在GCC 9.1的源代码目录中使用了cscope-r来搜索定义,但没有找到它。有人能指出定义此函数的位置吗?没有在任何地方定义\u内置\u va\u启动。它是一个(有点像sizeof是一个编译时操作符)。它是与相关的实现细节(由编译器提供,而不是C标准库实现libc)。真正重要

我试图找到在GCC的源代码中定义了
\uuu builtin\u va\u start
的位置,并了解它是如何实现的。(我在寻找定义了
va_start
的地方,然后发现这个宏被定义为
\u builtin\u va_start
)我在GCC 9.1的源代码目录中使用了
cscope-r
来搜索定义,但没有找到它。有人能指出定义此函数的位置吗?

没有在任何地方定义
\u内置\u va\u启动
。它是一个(有点像
sizeof
是一个编译时操作符)。它是与相关的实现细节(由编译器提供,而不是C标准库实现
libc
)。真正重要的是生成的汇编程序后面的和

GCC有专门的代码来处理编译器内置代码。而这些代码并不是定义内置代码,而是在编译器内部实现其特殊行为。而
\uuuu builtin\u va\u start
被扩展为编译后的C/C++代码的特定于编译器的内部表示形式,特定于GCC(可能有些)

从您的评论中,我可以推断您对实现细节感兴趣。但是这应该在你的问题中

如果您学习GCC 9.1源代码,请查看其中的一些
GCC-9.1.0/GCC/builtins.c
expand\u builtin\u va\u start
函数,以及
GCC-9.1.0/GCC/c-family/c-cppbuiltin.c
GCC-9.1.0/GCC/cppuiltin.c
GCC-9.1.0/GCC/jit/jit builtins.c>中的其他内置代码

你可以自己编写(在2Q2019中,对于GCC 9,你的插件的C++代码可能需要为未来的GCC 10改变)来添加你自己的GCC构建。顺便说一句,您甚至可以通过自己的特定代码来重载现有的

u builtin_va_start
行为,和/或您可能有(至少出于研究目的)自己的
stdarg.h
标题和
#define va_start(v,l)u my builtin_va_start(v,l)
并让您的GCC插件理解您的
\uuuuuMy\uBuiltin\uVa\uStart
插件特定内置。然而,请注意并阅读它的基本原理:我不是律师,但我倾向于相信您应该(而且法律文件要求您)发布带有开源许可证的GCC插件

您首先需要阅读有关编译器的教科书,如
,以了解an主要是转换编译代码的内部表示形式

您还需要花费数月的时间来研究GCC的许多内部表示。记住,是一个非常复杂的程序(大约有一千万行代码)。不要指望仅仅几天的工作就能理解它。看看这个房间里面

我死了的项目有更多关于GCC的参考和解释(GCC的设计理念和体系结构变化缓慢;因此概念仍然相关,即使个别细节发生了变化)我花了将近十年的时间才部分了解了GCC的一些中端层。我不能用一个简单的回答来传达这种知识


我的(由H2020资助的正在进行的工作,官僚作风太多)有十几页(在§1.3和1.4节中)介绍了GCC的内部表示。

但你为什么要问?您只需要使用,不应该关心实现细节。请你的问题添加几段动机没有一些动机,问题不清楚,范围太广。我投票决定结束it@BasileStarynkevitch请看上面回答你问题的评论。你应该在你的问题中解释,而不是在评论中。根据经验,永远不要评论你自己的问题(而是用你的问题来改进它)。我仍然觉得应该关闭它,正是因为您没有编辑您的问题,我很难理解“GCC内置在任何地方都没有定义”。你能详细说明一下吗?据我所知,在编译过程中,在某个时刻,
\u builtin\u va\u start
将被一些代码所取代。我试图理解它被替换了什么代码,以及在哪里定义了这些代码。是的。你的理解是错误的。你需要花几个月的时间来阅读更多关于编译器实现和GCC内部的内容。你能告诉我,如果这些内置函数没有在某个地方“定义”,编译器是如何“理解”它们的功能的吗?很抱歉,我给出了一些参考资料,但你需要多年的工作