MST

星途 面试题库

面试题:C语言可变参数宏实现简单求和

请使用C语言的可变参数宏实现一个函数宏,能够对传入的多个整数参数进行求和。假设参数个数不固定,但至少有一个参数。例如,调用该宏 `SUM(1, 2, 3)` 应返回6。
14.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdarg.h>

#define SUM(...) sum(__VA_ARGS__)

int sum(int first, ...) {
    va_list args;
    va_start(args, first);
    int total = first;
    int num;
    while ((num = va_arg(args, int)) != 0) {
        total += num;
    }
    va_end(args);
    return total;
}

你可以这样使用:

int main() {
    int result = SUM(1, 2, 3);
    printf("SUM(1, 2, 3) 的结果是: %d\n", result);
    return 0;
}

在上述代码中:

  1. SUM(...) 是一个宏定义,它展开为 sum(__VA_ARGS__)__VA_ARGS__ 是预定义宏,表示可变参数列表。
  2. sum 函数接受可变参数,通过 va_start 初始化可变参数列表,va_arg 逐个获取参数,va_end 结束可变参数的处理。这里假设用0作为参数结束的标志。
  3. main 函数中调用 SUM 宏来计算多个整数的和,并输出结果。