C 用于打印可变参数的宏,带有无参数选项
我要实现以下宏:C 用于打印可变参数的宏,带有无参数选项,c,macros,c-preprocessor,variadic,variadic-macros,C,Macros,C Preprocessor,Variadic,Variadic Macros,我要实现以下宏: ASSERT(condition, ...) condition is false hi condition is false number seven: 7 定义如下: 1.如果它只得到一个参数-如果条件为假,我们只打印“条件为假”。 2.如果它得到两个或更多参数-同上,另外:第二个参数将是printing format(类似于printf format),其余参数将是printing format(同样,与printf相同)。因此,除了可能打印“c
ASSERT(condition, ...)
condition is false
hi
condition is false
number seven: 7
定义如下:1.如果它只得到一个参数-如果条件为假,我们只打印“条件为假”。
2.如果它得到两个或更多参数-同上,另外:第二个参数将是printing format(类似于printf format),其余参数将是printing format(同样,与printf相同)。因此,除了可能打印“condition is false”之外,它还将像printf一样打印格式
ASSERT(condition, ...)
condition is false
hi
condition is false
number seven: 7
示例:
ASSERT(condition, ...)
condition is false
hi
condition is false
number seven: 7
ASSERT(condition, ...)
condition is false
hi
condition is false
number seven: 7
ASSERT(condition, ...)
(empty output)
condition is false
hi
condition is false
number seven: 7
ASSERT(condition, ...)
condition is false
hi
condition is false
number seven: 7
ASSERT(condition, ...)
condition is false
hi
condition is false
number seven: 7
我如何修改下面的代码来支持我所需要的
ASSERT(condition, ...)
condition is false
hi
condition is false
number seven: 7
#define ASSERT(condition, format,...) do { \
if (!(condition)) { \
printf(format, ##__VA_ARGS__); \
} \
} while (0)
您可以从此宏中删除
format
参数(将它们拉入变量部分)<代码>“条件为假\n”和格式字符串(如果存在)将连接成一个字符串,而不使用。
ASSERT(condition, ...)
condition is false
hi
condition is false
number seven: 7
#包括
#定义断言(条件,…)do{\
如果(!(条件)){\
printf(“条件为假\n”\uuuu VA\u ARGS\uuuuu)\
} \
}而(0)
int main()
{
断言(1);
断言(0);
断言(0,“Hi\n”);
断言(0,“数字为%d\n”,7);
返回0;
}
限制:
ASSERT(condition, ...)
condition is false
hi
condition is false
number seven: 7
应仅为字符串文字,而不是指向字符数组的指针格式