C语言怎么给函数添加形参的默认值
以下内容为本人的著作,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/OMVA6fVCnRQ4YMn6iO-khw
如果不是机缘巧合,当年转到C++之后,恐怕很难再有机会还写C的代码。面向对象在现代coding中,就像圣经一样,在码农的口中自带光环,code起来左一个语法糖,右一个范式编程,各种眼花缭乱。主业要是还用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
好了,看了输出结果,效果还是蛮不错的。
宏定义是C系列语言的一大宝藏,好好挖掘,说不定可以挖出很多宝贝来。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端