what is cdecl?

  cdecl这是一个Linux上功能很强大的一个小型程序,它最主要的功能就是能帮助我们解释一个很复杂的C语言声明。

例如,我写了这样一个C语言的一个声明:int   *(*g[])(int , float);

     那么我写的这个声明到底是什么意思呢?

     如果你的电脑能上网的话,戳这儿:http://cdecl.org/,你可以登录到这个网站进行在线的解释

   

   

  如果你的电脑无法接入Internet,你也可以在这个网站的右上角下载源代码,进行编译,生成一个可执行文件。

  例如,我在我的电脑上编译后的结果如图所示:

  

  接下来就测试下这个可执行文件是否也能同样的可以解释我们的声明呢?

  这里我们我们可以先看下帮助文档,这个我就不作翻译了,很简单,我们用到最多的功能就是explain <gibberish>

  

  explain <gibberish>的用法

  

  OK,有木有觉得看C语言复杂的函数声明变得很easy了!

what is cdecl?

时间: 2024-10-07 11:20:57

what is cdecl?的相关文章

汇编 ? cdecl 函数调用约定,stdcall 函数调用约定

知识点: ? cdecl 函数调用约定 ? stdcall 函数调用约定 ? CALL堆栈平衡 配置属性--> c/c++ -->高级-->调用约定 一.cdecl调用约定 VC++默认约定__cdecl 1.源代码 int __cdecl add1(int a,int b) { return a+b; } 2.生成汇编代码 00401000 /$ 55 PUSH EBP 00401001 |. 8BEC MOV EBP,ESP 00401003 |. 8B45 08 MOV EAX,D

关于调用约定(cdecl、fastcall、、thiscall) 的一点知识(用汇编来解释)good

函数调用规范 当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个.什么样的参数.即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调.为此,计算机提供了一种被称为栈的数据结构来支持参数传递. 函数调用时,调用者依次把参数压栈,然后调用函数,函数被调用以后,在堆栈中取得数据,并进行计算.函数计算结束以后,或者调用者.或者函数本身修改堆栈,使堆栈恢复原装.在参数传递中,有两个很重要的问题必须得到明确说明: 1) 当参数个

stdcall、cdecl、fastcall、thiscall 、naked call的汇编详解

函数调用规范 当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个.什么样的参数.即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调.为此,计算机提供了一种被称为栈的数据结构来支持参数传递. 函数调用时,调用者依次把参数压栈,然后调用函数,函数被调用以后,在堆栈中取得数据,并进行计算.函数计算结束以后,或者调用者.或者函数本身修改堆栈,使堆栈恢复原装.在参数传递中,有两个很重要的问题必须得到明确说明: 1) 当参数个

cdecl.org 翻译C声明的网站

有不懂的C语言声明请猛击http://cdecl.org   cdecl.org 翻译C声明的网站,布布扣,bubuko.com

cdecl和stdcall调用约定-汇编演示

.386 .model flat, stdcall .stack 4096 ExitProcess PROTO, dwExitCode:DWORD .data val2 sdword 1 result dword ? .code main proc call Example_cdecl call Example_stdcall invoke ExitProcess, 0 main endp comment /*C调用约定;参数入栈:从右到左:调用者恢复栈顶指针*/ Example_cdecl p

stdcall, cdecl, pascal 区别(转载)

转载自:http://www.cnblogs.com/lidabo/archive/2012/11/21/2781484.html stdcall, cdecl, pascal 区别 这三个参数都是告诉编译器参数的传递约定,参数的传递约定是指参数的传递顺序(从左到右还是从右到左)和由谁来恢复堆栈指针(调用者或者是被调用者),在 Win16下有两种约定: C 和 PASCAL. C约定规定参数传递顺序是从右到左,即最右边的参数最先压栈,由调用者恢复堆栈指针. PASCAL约定和C约定正好相反,它规

stdcall和cdecl

红色部分为不同之处.代码编译  在x86_64的机器上  选择了32位模式 gcc -S 1.c -m32 默认cdecl int add(int a,int b,int c){  int sum = a+b+c; return sum;}; int main(void){ int c=add(1,2,3);} add: pushl %ebp movl %esp, %ebp subl $16, %esp movl 8(%ebp), %edx movl 12(%ebp), %eax addl %e

2018/10/03-函数调用约定、cdecl、stdcall、fastcall- 《恶意代码分析实战》

cdecl是最常用的约定之一,参数是从右到左按序被压入栈,当函数完成时由调用者清理栈,并且将返回值保存在EAX中. stdcall约定是被调用函数负责清理栈,其他和cdecl非常类似. fastcall调用约定跨编译器时变化最多,但是它总体上在所有情况下的工作方式都是相似的.在fastcall中,前一些参数(典型的是前两个)被传到寄存器中,备用的寄存器是EDX和ECX(微软fastcall约定).如果需要的话,剩下的参数再以从右到左的次序被加载到栈上.通常使用fastcall比其他约定更高效,因

stdcall与cdecl的区别

1 区别 VC++的C/C++函数有两种基本的调用约定:__stdcall.__cdecl.它们有什么区别呢?请参考下表:     __stdcall __cdecl 函数代码 C int __stdcall addS(int a,int b) { return a + b; } int __cdecl addC(int a,int b) { return a + b; } ASM32 push    ebp mov    ebp,esp sub    esp,40h push    ebx p