可变参数宏(variadic macro)是指一种宏定义,它可以接受可变数量的参数。这在 C 和 C++ 语言中是一种常见的预处理器特性。可变参数宏允许你定义一个宏,可以根据需要传递不同数量的参数,这对于一些灵活的代码生成和简化代码片段非常有用。
在 C 和 C++ 中,可变参数宏使用特殊标识符 ...
来表示可变参数,并且在宏体内使用 __VA_ARGS__
来引用这些参数。
#define MACRO_NAME(first_arg, ...) \
// 使用 first_arg 和 __VA_ARGS__
下面是示例:
#include <stdio.h>
// 定义一个可变参数宏
#define PRINTF(format, ...) \
printf(format, __VA_ARGS__)
int main() {
// 使用宏打印信息
PRINTF("Hello, %s!\n", "world");
PRINTF("The answer is %d.\n", 42);
return 0;
}
可变参数宏在一些高级用法中非常有用,比如日志记录系统。下面是一个更复杂的示例,展示如何使用可变参数宏来实现一个简单的日志记录功能:
#include <iostream>
#include <string>
#include <cstdarg>
// 简化版的日志记录函数
void log_info(const char* format, ...) {
va_list args;
va_start(args, format);
vprintf(format, args);
va_end(args);
}
// 定义一个可变参数宏
#define LOG_INFO(...) \
log_info(__VA_ARGS__)
int main() {
// 使用宏记录信息
LOG_INFO("This is an info message: %s\n", "Hello, World!");
LOG_INFO("This is another message with a number: %d\n", 42);
return 0;
}