Eme*_*era 1 c x86 assembly variadic-functions calling-convention
因此,我一直在练习使用 CDECL 和 STDCALL 调用约定在 FASMW 中编写简单的子例程,这让我想知道printfC 中的函数将使用什么。
此外,x86 32 位汇编中的函数定义也很棒。如果这还不算过分的话。
根据 C 2018 7.1.4 2 和 7.21.6.3 1,printf如果程序将其声明为int printf(const char * restrict format, ...);,则必须工作,因此printf必须使用 C 实现的默认调用约定。
C 实现有可能提供 的多个实现printf,因此提供了指定 的第二个实现的函数或宏#include <stdio.h>的替代声明。然而,必须提供上述主要实现。printfprintf
此外,x86 32 位汇编中的函数定义也很棒。
printf您不太可能找到汇编语言的高质量现代实现,除非通过编译 C 和/或其他语言的实现来获得。实际上,您不太可能在单个例程中找到定义。printf是一个具有许多子部分的复杂例程,并且通常其实现分散在多个例程和源文件中。这个答案和这个答案有一些实现的链接。vprintf前者包含到 GNU C 库实现(或其入口点)的链接,这是printf.