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”的函数有什么区别呢?
看起来这个时候宏就是和函数一样的意思啊?!

解决方案 »

  1.   

    宏编译时会展开其定义的代码,放到你最终生成的二进制代码里。普通的API函数则把函数名加到最终生成的二进制代码里,调用的是系统DLL里面的代码
      

  2.   

    那就是说宏定义的函数功能不是系统提供的而是我们编译的时候“编译”进自己的程序的,这样是不是利用宏的程序都要比利用API函数的程序体积大些了?
      

  3.   

    宏(macro)在编译时会把代码插入到程序里,要是宏很多的话,目标文件会变的很大,函数则不同每调用一个函数时都是跳转到该函数的入口,执行该函数!调用函数多的话需要频繁的压栈弹栈,函数和宏个有优点和缺点。
      

  4.   

    hurryboylqs(中山三郎) 的最好!
     
        
      

  5.   

    对于宏,编译器在预编译的时候,就进行了宏的字符替换(也就是宏展开),在词法和语法分析的时候,就已经没有宏了。
    对于函数调用,在代码中是一个地址,执行到该地方的时候,就通过该地址跳转到该函数代码区执行(可能是obj里面也可能是dll动态链接库里面)。
    由于CPU要中止现在的操作,跳转到其他地方,必须要保存当前的状态,所以函数调用会占用堆栈内存空间来保存当前的状态。也就是说函数调用要多占内存空间,而内存资源是有限的,所以函数调用层数也会有限,这和宏替换不同。当然C++的内联inline函数例外,内联函数在凡是调用该函数的地方将代码都会复制一份,所以在调用inline函数时,不会进行跳转,也就不会占用堆栈内存空间。
      

  6.   

    嗯,支持hurryboylqs说法,也就是宏的话,在编译代码的过程中会自动展开,提高了执行效率,但是增加了文件大小,而函数相反~~~
      

  7.   

    借此宝贝,提一个问题,那自定义函数呢?它也是调用DLL吗