不定参数使用

C/C++的不定参数

C++的不定参数(C++11)

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>

template<typename... Args>
void print(Args... args) {
// 使用C++11的pack expansion来展开参数包
(std::cout << ... << args) << '\n';
}

int main() {
print("123","456",789);
return 0;
}

宏的不定参数(C99)

注意,单行注释没法注释\连接符

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cstdio>
// 宏定义中加入了do { ... } while (0)结构,不会引入额外的语句结束符(如分号)。
// 宏不定参数,##确保当没有参数时,删除多余的逗号。并加换行,以便输出更清晰
#define LOG(format, ...)do { \
printf(format, ##__VA_ARGS__);\
printf("\n");\
}while (0)

int main()
{
LOG("");
return 0;
}

C风格的va_list

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cstdarg>

void print(int num, ...) {
va_list args;
va_start(args, num);

for (int i = 0; i < num; ++i) {
std::cout << va_arg(args, int) << " ";//只接受整形
}

va_end(args);
std::cout << '\n';
}

int main() {
print(2,1,5);//使用比较受限,需要指明个数
return 0;
}


不定参数使用
https://weihehe.top/2024/09/14/不定参数使用/
作者
weihehe
发布于
2024年9月14日
许可协议