Marco的问题 宏定义中的参数只能作为表达式中的参量,将整个语句作为字符串传入,编译器是不会将它编译成代码的。用vc中view->Debug Windows-> Disassembly看一下就很清楚了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你这样使用就可以了。CString str1,str2;str1=_T("");str2=_T("return -1");ERR_HANDLE(str1,str2); 如果你愿意,当然可以这样做了。上面的代码之所以不行是因为你把return -1加上引号了。这样写就对了:ERR_HANDLE("...",return -1);softsprite说"宏定义中的参数只能作为表达式中的参量"不对,只要你愿,宏定义中的参数可以是任何东西。编译器在预编译时不会作任何检查,只是简单的把宏扩展开。随后的编译过程才会做各种检查工作。 请开下面这段代码,他们工作得很正常:#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);} 宏有时候是好东西,"可以使程序看起来简洁许多";但是有时候会给你带来大麻烦。我觉得大多数情况下inline函数是上述类型宏的理想替代品。它同样"可以使程序看起来简洁许多",而且方便调试。但是宏也自有它的用武空间.... 看看错误怎么改? GroupBox背景透明文字透明但文字下面有一横线 accept如何知道接受的是IPv4连接还是IPv6的? VC版里有没有爬山爱好者,能不能结盟同行,因为是女孩自己有的时候会害怕! 如何利用循环和存储过程向SQL中插入数据? 线程切换问题? 如何实现IDownloadManager? 100分求助,经常被一手机号骚扰,大家帮我想想办法 请教高手 关于MFCGridCtrl控件的一个问题 _ConnectionPtr::Open()函数 高分!!!!!!!!!!如何在网上取得准确的时间? 在VB中如何调用VC编写的DLL中的类、或类的方法?
CString str1,str2;
str1=_T("");
str2=_T("return -1");
ERR_HANDLE(str1,str2);
ERR_HANDLE("...",return -1);softsprite说"宏定义中的参数只能作为表达式中的参量"不对,只要你愿,宏定义中的参数可以是任何东西。编译器在预编译时不会作任何检查,只是简单的把宏扩展开。随后的编译过程才会做各种检查工作。
void CDaoDlg::OnButton3()
{
M("return", return);
}#define M1(y, x) {y; x;}
void CDaoDlg::OnButton4()
{
M1(MessageBox("return"), return);
}