我正在考虑像宏这样的函数的右侧(扩展)。考虑这个例子:
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)
这种实施背后的动机是什么?