MSDN中有些看似“函数”的宏(macro)如:
The capDriverConnect macro connects a capture window to a capture driver. You can use this macro or explicitly send the WM_CAP_DRIVER_CONNECT message.BOOL capDriverConnect(
hwnd,
iIndex
);它们和被称作“function”的函数有什么区别呢?
看起来这个时候宏就是和函数一样的意思啊?!
The capDriverConnect macro connects a capture window to a capture driver. You can use this macro or explicitly send the WM_CAP_DRIVER_CONNECT message.BOOL capDriverConnect(
hwnd,
iIndex
);它们和被称作“function”的函数有什么区别呢?
看起来这个时候宏就是和函数一样的意思啊?!
对于函数调用,在代码中是一个地址,执行到该地方的时候,就通过该地址跳转到该函数代码区执行(可能是obj里面也可能是dll动态链接库里面)。
由于CPU要中止现在的操作,跳转到其他地方,必须要保存当前的状态,所以函数调用会占用堆栈内存空间来保存当前的状态。也就是说函数调用要多占内存空间,而内存资源是有限的,所以函数调用层数也会有限,这和宏替换不同。当然C++的内联inline函数例外,内联函数在凡是调用该函数的地方将代码都会复制一份,所以在调用inline函数时,不会进行跳转,也就不会占用堆栈内存空间。