gpt4 book ai didi

C 默认参数

转载 作者:行者123 更新时间:2023-11-30 16:13:13 25 4
gpt4 key购买 nike

有没有办法为 C 中的函数指定默认参数?

最佳答案

哇,这里的每个人都是如此悲观主义者。答案是肯定的。

这并不简单:到最后,我们将拥有核心函数、支持结构、包装函数和宏围绕包装函数。在我的工作中,我有一组宏来自动化这一切;一次如果您了解了流程,那么您也可以轻松执行相同的操作。

我已在其他地方写过此内容,因此这里有一个详细的外部链接来补充此处的摘要:http://modelingwithdata.org/arch/00000022.htm

我们想转向

double f(int i, double x)

进入一个采用默认值(i=8,x=3.14)的函数。定义一个伴随结构:

typedef struct {
int i;
double x;
} f_args;

重命名您的函数f_base,并定义一个设置默认值和调用的包装函数基地:

double var_f(f_args in){
int i_out = in.i ? in.i : 8;
double x_out = in.x ? in.x : 3.14;
return f_base(i_out, x_out);
}

现在使用 C 的可变参数宏添加一个宏。这样用户就不必知道他们是实际上填充一个 f_args 结构并认为他们正在做通常的事情:

#define f(...) var_f((f_args){__VA_ARGS__});

好的,现在以下所有内容都可以工作:

f(3, 8);      //i=3, x=8
f(.i=1, 2.3); //i=1, x=2.3
f(2); //i=2, x=3.14
f(.x=9.2); //i=8, x=9.2

检查有关复合初始值设定项如何设置确切规则的默认值的规则。

有一件事不起作用:f(0),因为我们无法区分缺失值和零。根据我的经验,这是需要注意的事情,但可以按照以下方式处理:需求出现了——有一半的时间你的默认值实际上是零。

我在写这篇文章时遇到了麻烦,因为我认为命名参数和默认值 确实让 C 语言编码变得更容易、更有趣。和C 的伟大之处在于它如此简单,而且仍然有足够的能力使这一切成为可能。

关于C 默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58100348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com