我需要在宏的实际参数中使用括号,但是括号似乎会改变分隔宏参数的逗号的行为。
我让预处理器将其输出转储到文本文件中,以便查看其生成的内容。
然后我进行了基本测试以确认此行为。
#define MACRO_TEST_1( X , Y ) X && Y
MACRO_TEST_1 ( A , B )
// Desired result: A && B
// Actual result: A && B
MACRO_TEST_1 ( ( C , D ) )
// Desired result: ( C && D )
// Actual result: ( C , D ) &&
// Warning: "not enough actual parameters for macro 'MACRO_TEST_1'"
似乎将左括号添加到第一个参数中,将右括号添加到第二个参数中,会导致预处理器将逗号视为第一个参数的一部分,并因此假定我根本没有提供第二个参数。这一点可以从警告以及预处理器输出中在
&&
后面什么也没有显示来证明。那么我的问题是,如何告诉预处理器逗号分隔参数,即使这些参数中有括号?
我尝试转义括号或逗号,但这没有任何区别。(相同的结果,只是在预处理器输出中插入了转义字符。)
func(1, 2)
是两个参数,而func((1, 2))
只是一个参数。 - Barmar