首页IT科技c语言参数默认值(C语言怎么给函数添加形参的默认值)

c语言参数默认值(C语言怎么给函数添加形参的默认值)

时间2025-07-30 22:52:10分类IT科技浏览4825
导读:以下内容为本人的著作,如需要转载,请声明原文链接 微信公众号「englyf」https://www.cnblogs.com/englyf/p/16637890.html...

以下内容为本人的著作              ,如需要转载                   ,请声明原文链接 微信公众号「englyf」https://www.cnblogs.com/englyf/p/16637890.html

如果不是机缘巧合      ,当年转到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系列语言的一大宝藏                    ,好好挖掘             ,说不定可以挖出很多宝贝来                    。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
c++ incline(C++ inline) linux设备驱动分类(Linux系统的硬件设备驱动的底层结构讲解)