C语言实现默认参数

本文最后更新于:2025年11月19日 下午

关键字:可变参数,可变长参数

疑惑open函数为什么可以两个参数,也可以三个参数。如下是man open看到的声明:

1
2
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

c语言本身不支持重载,它是怎么做到的呢?

下面来一个简单的实现。
利用逗号表达式和宏来实现,c为默认参数,默认0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

#define aa(a,b,c...) _aa(a,b,(0,##c))

void _aa(int a,int b,int c)
{
printf("%d,%d,%d\n", a,b,c);
}

int main()
{
aa(1,2);
aa(1,2,3);
return 0;
}

输出如下:

1
2
1,2,0
1,2,3

C语言实现默认参数
https://leon0625.github.io/2023/12/14/b3979ae8f5b4/
作者
leon.liu
发布于
2023年12月14日
许可协议