【发布时间】:2017-08-06 09:15:24
【问题描述】:
我在我的代码中使用了一个名为 PRINT(...) 的宏,它获取可变数量的参数,其行为类似于 printf(获取格式和参数)。它是这样定义的:
#define PRINT(...) PRINT(__VA_ARGS__)
现在我想修改它,让它有一个可选参数,比如它的名字是number,它会在打印中添加一个数字前缀。例如:
PRINT("%s", "hi") -> 将打印 hiPRINT(1, "%s", "hi") -> 将打印 1: hi
如何更改 PRINT 宏以支持此功能?
重要的是,我不想从我的代码更改对该宏的任何现有调用(在示例中,如果我调用了 PRINT("%s", "hi") - 更改后它需要保持不变)。
此外,我不能为此目的创建新宏 - 必须为此目的使用现有的 PRINT 宏(但当然我可以更改它的 Argumnts 定义)。
知道我该怎么做吗?
编辑:我看到了这个post 关于可变参数宏 - 但它与我在这里问的不同,因为参数number 需要是一个可识别的变量,它将在PRINT 的实现中被视为-1 如果对PRINT 的调用不包含number 参数(-1 将指示不打印数字),否则它将打印数字前缀。
【问题讨论】:
-
@TonyTannous ,编辑了我的帖子。您提供的链接没有解决我的问题
-
考虑如何确定您的
number参数是否存在。宏变体可能会更容易。 -
是
PRINT(...)的宏定义真的是PRINT(__VA_ARGS__)吗? -
现在请一次编辑帖子,以便它在一个地方包含您想要实现的所有必要要求。