MST

星途 面试题库

面试题:C语言宏定义中的可变参数宏

请解释C语言中可变参数宏的定义方式,并给出一个简单示例,说明如何使用可变参数宏来实现类似printf函数的功能,例如输出不同数量的整数。
13.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 可变参数宏的定义方式: 在C语言中,C99标准引入了可变参数宏。定义可变参数宏的语法如下:
#define 宏名(固定参数, ...) 替换部分

其中,... 表示可变参数列表,在替换部分中,可以使用 __VA_ARGS__ 来代表这些可变参数。

  1. 示例代码
#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 利用了函数的可变参数机制以及格式化字符串解析等复杂功能。