咨询:C标准是否定义调用约定?关于cdecl的标准依据疑问
C标准是否定义了调用约定?
C标准没有对调用约定(包括你提到的cdecl)做出强制性的统一定义。
原因很简单:C标准的核心目标是保证代码的跨平台可移植性,而调用约定属于和硬件架构、操作系统、编译器绑定的底层实现细节——比如参数入栈顺序、栈帧的维护责任、寄存器的使用规则等,这些都需要根据具体平台的特性来设计,标准不会做一刀切的规定。
cdecl本质是编译器厂商(比如GCC、MSVC)为C程序实现的一种常见调用约定,它的规则(比如参数从右到左入栈、由调用者负责清理栈空间)是行业形成的惯例,但从来不是C标准的要求。C标准只会规范函数调用的高层语义(比如参数的求值顺序、返回值的传递逻辑),至于底层怎么传递参数、怎么维护栈,完全交给编译器实现来决定。
内容的提问来源于stack exchange,提问作者Jollioke Muzaom D
相关产品推荐
相关产品推荐

