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
标签:
C
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 继电器的使用