是否有一般方法来屏蔽C中宏参数中的注释?我知道括号可以用于此目的,但是如果添加的括号导致宏输出中出现语法错误,则无法使用括号 . 我听说({})可以屏蔽GCC中的逗号,但是我需要这个代码也可以在VC中工作(最近的一个版本符合关于宏中逗号的C标准) . 我也不能在我的情况下使用可变参数宏 .
我想要做的具体情况是这个(lengthof是在别处定义的宏) . 我正在尝试为整个事情编写一个宏,因为这将被多次使用,并且拥有多宏解决方案会添加大量额外的测试代码 .
#define TEST_UNFUNC(func, res_type, res_set, op_type, op_set) \
{ \
static const res_type res[] = res_set; \
static const op_type op[] = op_set; \
int i; \
for (i = 0; i < MIN(lengthof(res), lengthof(op)); i++) \
assert(func(op[i]) == res[i]); \
}
如果可能的话,我想要一个通用答案,而不仅仅是针对这个特定宏的解决方法 .
1 回答
使用括号屏蔽逗号,然后通过以下示例中定义的特殊
unparen
宏传递它们:这里的诀窍是
invoke
宏强制进行额外的扩展,允许really_unparen
被调用,即使源中没有后跟括号 .编辑:根据下面的评论,在这种情况下似乎没有必要 . 虽然我曾经遇到过我需要它的情况......但它没有受到伤害 .