如何编写不返回值的函数式宏

时间:2017-02-28 15:04:08

标签: c macros

我正在考虑像宏这样的函数的右侧(扩展)。考虑这个例子:

Set db = CurrentDb
Set qdf = db.QueryDefs("SavedQueryName")

' BIND VALUES TO PARAMETERS
qdf.Parameters("cbOpleiding_param") = Me.cbOpleiding
qdf.Parameters("cbopleidingniveau_param") = Me.cbOpleidingNiveau 
qdf.Parameters("cbstudiegroep_param") = Me.cbStudiegroep
qdf.Parameters("cbstudierichting_param") = Me.cbStudierichting

Set rst = qdf.OpenRecordset()

会做这个工作。但后来我遇到了一个复合语句,通过像这样的宏来表达:

#define addOneTo(a)    (a)++

也会做这项工作。但是如果我想在这个场合使用宏:

#define addOneTo(a,b)    (a)++; (b)++

我会得到:

if(true)
   addOneTo(a,b);

在^^中,这个^^个案if(true) (a)++; (b)++; 将增加,而不管b语句中表达式的值。这不是我想要的。因此我搜索了它,并且遇到了这个解决方案:

if

所以我很高兴^^以上的例子^^,除了我不理解#define addOneTo(a,b) do{ (a)++; (b)++; }while(0) ,我们只能使用这样的复合语句???:

do while(0)

这种实施背后的动机是什么?

0 个答案:

没有答案