如何使用断言实现 C 宏

雅科夫

我在一个 C 项目上工作,它通过使用宏实现了一种多态性

void method1Instrumentation(void*);
bool method2Instrumentation(void*);
bool method3Instrumentation(void*);

#define method1(arg) method1Instrumentation(arg)
#define method2(arg) method2Instrumentation(arg)
#define method3(arg) method32Instrumentation(arg)

对于每一个method1Instrumentation, method2Instrumentation, method3Instrumentation都有几个实现。根据内部配置,编译器“选择”适当的函数。我(可能)无法改变给定的设计。但我需要添加assertsmethod*.

工作正常

#define method1(arg) assert(arg == NULL) method1Instrumentation(arg)

不起作用(编译问题)

#define method2(arg) assert(arg == null) method2Instrumentation(arg)

出现问题是因为原始代码有以下调用

if(method2(arg))
{
}

我应该如何添加assets以下限制?

巴马

使用逗号运算符assert和 函数调用组合成单个表达式。此外,将其括在括号中以防止在将其与其他运算符组合时出现运算符优先级问题。

#define method1(arg) (assert(arg != NULL), method1Instrumentation(arg))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章