C(非C++) --- 函数形参添加默认值(只能添加一个)

一般情况下,只有C++的函数支持形参添加默认值,但是C语言可以通过可变参数宏实现

 

先定义的一个被执行的函数

void _fun(int val)
{
    printf("fun input val:%d", val);
}

在调用函数时不输入参数,希望系统输入默认的参数值

定义一个可变参的宏定义

#define fun(...)    _fun((default_val, ##__VA_ARGS__));

输入给_fun的参数形式上是(default_val, ##__VA_ARGS__),其中的default_val就是我们设定的参数默认值,默认值类型应该和_fun的形参类型一致。

调用fun宏定义时,如果没有输入参数,##会把(default_val, ##__VA_ARGS__)变成(default_val),那么实际输入给_fun的参数就变成了(default_val);如果有输入参数,比如数值A,由于逗号运算符的运算优先级会把逗号后边的值输出返回,(default_val, ##__VA_ARGS__)变成(A),那么实际输入给_fun的参数就变成了(A)。

看一下实际的例子,由于_fun的实际形参类型为int类型,那么把default_val(形参默认值)改为123测试一下

复制代码
#include <stdio.h>
 
#define fun(...)    _fun((123, ##__VA_ARGS__));
 
void _fun(int val)
{
    printf("fun input val:%d", val);
}
 
int main()
{
    fun();
    printf("\r\n---\r\n");
    fun(321);
}
复制代码

执行结果

fun input val:123
---
fun input val:321

 

 

如果函数参数有两个,例子如下:

复制代码
#include <stdio.h>

#define fun(a,...)    _fun(a, (3, ##__VA_ARGS__));

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

int main()
{
    fun(1);
    printf("---\n");
    fun(1, 2);

    int x = (3,5); // 括号很重要
    printf("x=%d\n", x);
}
复制代码

执行结果

a=1, b=3
---
a=1, b=2
x=5

 

posted @   流水灯  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
历史上的今天:
2018-03-20 Qt ------ QTableView QTableWidget
2016-03-20 继电器的使用
点击右上角即可分享
微信分享提示