2017-08-15 56 views
2

C中的每个函数都必须有一个调用约定,但main函数的调用约定是什么(我认为它是cdecl调用约定,但我不确定)?C中主函数的调用约定是什么?

+5

C语言没有定义任何调用约定。您可能希望在您的问题中添加更多相关标签和更多信息 –

+0

'main'与其他函数具有相同的调用约定; '_start'(ELF中的一个典型入口点),另一方面,_is_ cdecl并且必须处理转换为main(本身)的本地调用约定......不知道为什么'_start'不使用本地调用约定......可能是因为在Linux中,binfmt_elf源代码位于./fs(文件系统)目录中,而不是./arch和32位x86使用的cdecl,所以很容易懒惰, cdecl平台在其libc中需要一些汇编或编译器特定的内部函数。 – technosaurus

回答

3

这取决于架构和平台。许多x86 C运行时间规范要求主要是cdecl,但这并不是保证。

底线是你不会在C标准中找到这些信息,因为这种语言不与任何一种架构绑定。您可能有更多的运气阅读您感兴趣的特定编译器的文档。

2

C语言没有定义调用约定,但处理器体系结构和开发平台确实如此。 对于X86调用约定请维基 https://en.wikipedia.org/wiki/X86_calling_conventions

而且,看到ARM调用约定在下面的链接http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042f/IHI0042F_aapcs.pdf

更多关于调用约定见下面的维基链接 https://en.wikipedia.org/wiki/Calling_convention

此外,检查有关MIPS调用约定讨论at GCC MIPS-32 Calling Conventions/Stack Frame Definition