面试题答案
一键面试- 可变参数宏的定义方式: 在C语言中,C99标准引入了可变参数宏。定义可变参数宏的语法如下:
#define 宏名(固定参数, ...) 替换部分
其中,...
表示可变参数列表,在替换部分中,可以使用 __VA_ARGS__
来代表这些可变参数。
- 示例代码:
#include <stdio.h>
// 定义一个可变参数宏,类似printf输出整数
#define PRINT_INTS(...) \
do { \
printf("打印整数: "); \
int _args[] = {__VA_ARGS__}; \
for (size_t i = 0; i < sizeof(_args) / sizeof(_args[0]); ++i) { \
printf("%d ", _args[i]); \
} \
printf("\n"); \
} while (0)
int main() {
PRINT_INTS(1, 2, 3);
PRINT_INTS(4, 5);
return 0;
}
在上述代码中:
PRINT_INTS
是定义的可变参数宏。__VA_ARGS__
代表可变参数列表,在宏展开时会被实际传入的参数替换。- 通过将可变参数放入数组
_args
中,然后遍历数组进行输出,从而实现类似printf
输出不同数量整数的功能。注意这种方式仅适用于同一类型参数的情况,与真正的printf
相比功能较为有限。实际的printf
利用了函数的可变参数机制以及格式化字符串解析等复杂功能。