在一个示例项目中,我定义了宏
#define FOO(x, y) x + y .
这工作得很好。例如,FOO(42, 1337)
被评估为1379
。
但是,我现在想使用另一个#define
:
#define SAMPLE 42, 1337
当我现在打电话时FOO(SAMPLE)
,这是行不通的。编译器告诉我这FOO
需要两个参数,但只用一个参数调用。
我想这样做的原因是,尽管宏的参数是在函数本身之前评估的,但预处理器在评估之后不会再次解析整个指令。这类似于不能从宏输出附加预处理器指令的事实。
是否有可能获得所需的功能?
用 C 函数替换FOO
宏是不可能的。原始宏位于我无法更改的第三方代码中,它输出以逗号分隔的值列表,以直接在数组初始化程序中使用。因此,C 函数不能复制相同的行为。
如果使用简单的方法无法完成此任务:您将如何(x, y)
以可维护的形式存储对?就我而言,有 8 个论点。因此,将各个部分存储在单独的#define
-s 中也不容易维护。