面试题答案
一键面试#include <stdio.h>
#include <stdarg.h>
#define PRINT_ARGS(fixed1, fixed2, ...) \
do { \
printf("Fixed parameter 1: %d\n", fixed1); \
printf("Fixed parameter 2: %d\n", fixed2); \
va_list args; \
va_start(args, fixed2); \
int arg; \
while ((arg = va_arg(args, int)) != 0) { \
printf("Variable argument: %d\n", arg); \
} \
va_end(args); \
} while (0)
你可以这样使用这个宏:
int main() {
PRINT_ARGS(1, 2, 3, 4, 0);
return 0;
}
在上述代码中:
- 定义了
PRINT_ARGS
宏,它接受两个固定参数fixed1
和fixed2
,以及可变参数...
。 - 在宏体中,首先打印两个固定参数的值。
- 使用
va_list
、va_start
、va_arg
和va_end
来处理可变参数。这里假设可变参数都是int
类型,并且以0
作为结束标志来打印可变参数的值。
注意,在实际应用中,可以根据具体需求修改参数类型和结束标志的判断条件。