C++函数前加宏表示的意思

在VC编程中,也许大家会遇到如下函数定义:

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

相信大家都知道这个函数,但分析似乎比平常的函数定义多了CALLBACK。

 

现在分析如下:

LRESULT为返回值,实际上是LONG

CALLBACK为宏,#define CALLBACK    __stdcall。是定义一种调用约定。

作用是:

Pushes parameters on the stack, in reverse order (right to left)

意思:将参数按反序(从右到左)压入堆栈中。

 

 

其他宏:

calling conventions
The following calling conventions are supported by the Visual C/C++ compiler.

Keyword  Stack cleanup  Parameter passing 
__cdecl
Caller
Pushes parameters on the stack, in reverse order (right to left)

__clrcall
n/a
Load parameters onto CLR expression stack in order (left to right).

__stdcall
Callee
Pushes parameters on the stack, in reverse order (right to left)

__fastcall
Callee
Stored in registers, then pushed on stack

__thiscall
Callee
Pushed on stack; this pointer stored in ECX


Calling convention for callback functions.
This type is declared in WinDef.h as follows:
#define CALLBACK __stdcall

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
c语言中的宏函数是一种宏定义的形式,可以在编译预处理阶段通过替换来实现类似函数调用的功能。它不同于普通的函数调用,其主要特点是在宏定义时使用一些特殊的宏形参,这些宏形参可以包含可变参数。 可变参数是指宏函数在调用时可以传入不定数量的参数。在宏定义中,我们可以使用"..."来表示可变参数,且该参数必须放置在宏参数列表的最后。 通过宏定义中的可变参数,我们可以通过宏函数实现一些功能较为复杂的操作。比如,我们可以编写一个求和的宏函数,可以传入任意数量的参数,并对它们进行求和计算。例如: ``` #define SUM(...) sum(__VA_ARGS__) int sum(int count, ...) { int result = 0; va_list arg; va_start(arg, count); for(int i = 0; i < count; i++) { result += va_arg(arg, int); } va_end(arg); return result; } ``` 在使用可变参数的宏函数时,我们需要使用宏定义中的特殊宏形参,包括`va_list`、`va_start`、`va_arg`和`va_end`。`va_list`是一个用于存储可变参数的类型,`va_start`用于初始化可变参数的访问,`va_arg`用于按顺序获取可变参数的值,`va_end`用于结束对可变参数的访问。 总之,宏函数和可变参数是C语言中非常有用的功能,可以通过它们来实现一些复杂的操作和功能。但需要注意的是,在使用可变参数时要小心,保证参数的正确性和合法性,以免出现错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值