标题:这是做什么用的?(头文件)
只看楼主
zhangfuhua
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-7-1
 问题点数:0 回复次数:7 
这是做什么用的?(头文件)
#if __STDC__
#define _Cdecl
#else
#define _Cdecl    cdecl
#endif

我看见每个头文件里都有这个宏定义
有哪位知道是做什么用的不?
谢谢!
搜索更多相关主题的帖子: 头文件 Cdecl define 定义 else 
2008-01-21 16:49
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
在程序中知道(在头文件中没研究过)
2008-01-21 17:01
zhangfuhua
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-7-1
得分:0 
哪在程序中又是什么意思呢?
2008-01-21 17:06
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
条件编译呀
#if __STDC__ /*为真编译下一段*/
  printf("abc");
#else
  a=34567; /*假编译这一段*/
#endif

[[italic] 本帖最后由 xianshizhe111 于 2008-1-21 17:15 编辑 [/italic]]
2008-01-21 17:12
zhangfuhua
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-7-1
得分:0 
这个我知道
不过还是谢谢你
2008-01-21 17:39
nobush
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-1-10
得分:0 
微軟為了兼容老版本搞出來的東西

cdecl 讓程序按C命名調用,而不是PASCAL命名調用
2008-01-21 18:23
zhangfuhua
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-7-1
得分:0 
_cdecl 是C Declaration的缩写,表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数无需要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。

_stdcall 是Standard Call的缩写,是C++的标准调用方式:所有参数从右到左依次入栈,如果是调用类成员的话,最后一个入栈的是this指针。这些堆栈中的参数由被调用的函数在返回后清除,使用的指令是 retn X,X表示参数占用的字节数,CPU在ret之后自动弹出X个字节的堆栈空间。称为自动清栈。函数在编译的时候就必须确定参数个数,并且调用者必须严格的控制参数的生成,不能多,不能少,否则返回后会出错。

PASCAL 是Pascal语言的函数调用方式,也可以在C/C++中使用,参数压栈顺序与前两者相反。返回时的清栈方式忘记了。。。

_fastcall 是编译器指定的快速调用方式。由于大多数的函数参数个数很少,使用堆栈传递比较费时。因此_fastcall通常规定将前两个(或若干个)参数由寄存器传递,其余参数还是通过堆栈传递。不同编译器编译的程序规定的寄存器不同。返回方式和_stdcall相当。

_thiscall 是为了解决类成员调用中this指针传递而规定的。_thiscall要求把this指针放在特定寄存器中,该寄存器由编译器决定。VC使用ecx,Borland的C++编译器使用eax。返回方式和_stdcall相当。

_fastcall 和 _thiscall涉及的寄存器由编译器决定,因此不能用作跨编译器的接口。所以Windows上的COM对象接口都定义为_stdcall调用方式。

C中不加说明默认函数为_cdecl方式(C中也只能用这种方式),C++也一样,但是默认的调用方式可以在IDE环境中设置。

带有可变参数的函数必须且只能使用_cdecl方式,例如下面的函数:
int printf(char * fmtStr, ...);
int scanf(char * fmtStr, ...);
收到的鲜花
  • forever742008-01-22 13:52 送鲜花  1朵  
2008-01-22 09:55
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
谢谢支持
2008-01-22 11:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-198225-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.436219 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved