是的,我知道“cdecl”是一个显着的调用约定的名称,所以请不要向我解释调用约定。我要问的是缩写(?)“cdecl”实际上代表什么。我认为这是一个糟糕的命名选择,因为乍一看它让人想起“C 声明符”(C 的一个相当独特的句法方面)。事实上,有一个名为 cdecl 的程序,其唯一目的是破译 C 声明符。但据我所知,C 声明符语法与调用约定完全无关。
简化版:“stdcall”代表“标准调用约定”。 “cdecl”代表什么?
原文由 fredoverflow 发布,翻译遵循 CC BY-SA 4.0 许可协议
CDECL 一词源于 Microsoft 的 BASIC 及其混合语言编程生态系统。该生态系统允许 Microsoft 的四种主要语言(BASIC、FORTRAN、Pascal 和 C)中的任何一种调用任何其他语言。每种语言都有稍微不同的调用约定,并且每种语言都有一种方法来声明外部函数或过程以使用特定的约定。
在 BASIC 中,必须先使用
DECLARE
语句,然后才能使用CALL
语句调用外部函数。要表示外部 FORTRAN 或 Pascal 过程或函数,您可以编写以下之一C 调用约定与其他语言不同,部分原因是参数以相反的顺序压入堆栈。您可以通过添加 CDECL 修饰符来告知 BASIC:
相反,当用 FORTRAN 或 Pascal 编写时,修饰符是 [C]。这表明 CDECL 特定于 BASIC 的 DECLARE 语句,而不是先前建立的术语。当时,“C 调用约定”没有特定的术语。只有随着 WIN32 中新的调用约定(stdcall、fastcall 等)的出现,“cdecl”才被采用并成为事实上的名称,以在没有其他术语的情况下指代遗留约定。
总之,CDECL 的意思是“C 声明”。它起源于 BASIC 编译器,而不是 C 编译器,它是一个任意选择的 BASIC 关键字,并且有些多余,因为普通的“C”不能是关键字。
关于 CDECL 的详细信息可以在这个 1987 年的文档中找到:
https://archive.org/details/Microsoft_Macro_Assembler_5.1_Mixed_Language_Programming_Guide/page/n1/mode/2up?q=cdecl