如何在if条件下定义代码块

时间:2019-08-24 17:15:44

标签: c macos if-statement

我使用旧的C项目,应该进行一些更改 它有很多宏。 函数调用在此处定义为

#define myFunc(arg) myBaseFunc(arg)

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

#define checkArg(arg) {\
 // lot of code
}

我无法更改checkArg的实现 1)我想//

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

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

2)我想

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

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

这种情况下是否有解决方法

2 个答案:

答案 0 :(得分:1)

我认为可能是这样,但是您需要知道参数类型:

df1 <- structure(list(col = c("\"val\":\"O;P;Q8;S\"}]", "\"val\":\"P;V;I9;J\"}]", 
"\"val\":\"Z;A;G8;N\"}]")), class = "data.frame", row.names = c(NA, 
-3L))

尽管正如我所说,它仅限于了解类型。我刚刚向项目添加了一个函数,通过运行currEnv.SetInt("_Rotation", rotVal); //e.g., 45 然后运行DynamicGI.UpdateEnvironment(); 来检查您的代码。这种方法很简单,但是有很大的缺点。

答案 1 :(得分:1)

一个可能的解决方案是在将arg传递给基本函数之前对其进行检查。但是,只有在只有一个参数的情况下,这种方法才有效。

switch ($order->status) {
    case "preparing" : $messageMiddle = " your order is being prepared. Make your way towards the store.";
                       break;
    case "complete"  : $messageMiddle = " your order is done! Please show your order-code at the store.";
                       break;
    default          : $messageMiddle = " thank you for ordering ";
                       break;
}

必须更改您的#define myFunc(arg) myBaseFunc(checkArg(arg)) 函数,以便它们返回与参数相同的值,例如

checkArg