gpt4 book ai didi

C 默认参数

转载 作者:太空狗 更新时间:2023-10-29 16:13:40 26 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/1472138/

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