C 如何在if条件中定义代码块

C 如何在if条件中定义代码块,c,macos,if-statement,C,Macos,If Statement,我使用的是旧的C项目,应该做一些更改 它有很多宏。。。。 函数调用在这里定义为 #define myFunc(arg) myBaseFunc(arg) bool myBaseFunc是一个函数,实际上有几个myBaseFunc 这是一种多态性 我需要为myFunc添加一些参数正确性检查 实际上,该项目有: #define checkArg(arg) {\ // lot of code } 我无法更改checkArg实现 我想// /*It is not correct if I do `i

我使用的是旧的C项目,应该做一些更改 它有很多宏。。。。 函数调用在这里定义为

#define myFunc(arg) myBaseFunc(arg)
bool myBaseFunc是一个函数,实际上有几个myBaseFunc 这是一种多态性 我需要为myFunc添加一些参数正确性检查 实际上,该项目有:

#define checkArg(arg) {\
 // lot of code
}
我无法更改checkArg实现 我想//

/*It is not correct if I do `if(myFunc(arg))`*/

#define myFunc(arg)\
checkArg(arg)\
myBaseFunc(arg)
我想

/*It is better...but compiler doesn`t like code block `{}` inside`if(myFunc(arg))`*/

#define myFunc(arg)(\
checkArg(arg),\
myBaseFunc(arg))

对于这种情况,是否有解决方法?我认为可以这样做,但您需要知道参数类型:

int main_check_function(void* data) { // <= this type need to be type of functions.
    checkArg(data);
    return (myBaseFunc(data));
}

#define myFunc(arg) (main_check_function(arg))

尽管如我所说,它仅限于了解类型。我刚刚在project中添加了一个函数,通过运行checkArg,然后运行myBaseFunc来检查代码。这种方法很简单,但有一个很大的缺点。

一个可能的解决方案是在将arg传递给基函数之前检查它。但是,只有当只有一个参数时,这才有效

#define myFunc(arg) myBaseFunc(checkArg(arg))
必须更改checkArg函数,使其返回与参数相同的值,例如

int checkArg(int value) {
  ... test stuff
  return value;
}

请详细说明编译器不喜欢代码块{}insideifmyFuncarg显示代码和编译器消息。{}不应该是一个问题,如果您在每一行的末尾仔细地使用`\`,而不是在显示的代码中。。。也就是说,请对您描述的代码案例进行分析。@Yunnosch-int a=1,b=0;如果a>1,b//ok如果{a>1},bdoesn`t compile为什么您认为必须使用宏?有内联函数,也有普通函数——两者都比宏之类的函数好。传递给marcos的参数类型是固定的吗?如果是的话,我可能会有一个办法……如果{a>1;},b,试着编译它。然后阅读编译器显示的警告。我的警告是:逗号运算符的左操作数无效[-Wunused value]|这说明了什么?我无法更改它。它应该是一个宏