宏定义中的参数只能作为表达式中的参量,将整个语句作为字符串传入,编译器是不会将它编译成代码的。用vc中view->Debug Windows-> Disassembly看一下就很清楚了。

解决方案 »

  1.   

      你这样使用就可以了。
    CString str1,str2;
    str1=_T("");
    str2=_T("return -1");
    ERR_HANDLE(str1,str2);
      

  2.   

    如果你愿意,当然可以这样做了。上面的代码之所以不行是因为你把return -1加上引号了。这样写就对了:
    ERR_HANDLE("...",return -1);softsprite说"宏定义中的参数只能作为表达式中的参量"不对,只要你愿,宏定义中的参数可以是任何东西。编译器在预编译时不会作任何检查,只是简单的把宏扩展开。随后的编译过程才会做各种检查工作。
      

  3.   

    请开下面这段代码,他们工作得很正常:#define M(y, x) {MessageBox(y); x;}
    void CDaoDlg::OnButton3() 
    {
        M("return", return);
    }#define M1(y, x) {y; x;}
    void CDaoDlg::OnButton4() 
    {
        M1(MessageBox("return"), return);
    }
      

  4.   

    宏有时候是好东西,"可以使程序看起来简洁许多";但是有时候会给你带来大麻烦。我觉得大多数情况下inline函数是上述类型宏的理想替代品。它同样"可以使程序看起来简洁许多",而且方便调试。但是宏也自有它的用武空间....