【发布时间】:2020-03-03 23:59:48
【问题描述】:
我正在尝试对 C 中结构成员的不同值使用相同的函数。实际上,我的函数很大,我不想一次又一次地重写它。 那么,有没有其他方法可以实现呢?
typedef struct {
int xpos;
char label[30];
fielddesc field;
} editordesc;
我想使用相同的功能更改 xpos 和其他一些成员:
void edit(void)
{
editordesc setf[] = { 5,"Description", 40, 0, plu.rec.DESCRIPTION };
// code
}
void edit1(void)
{
editordesc setf[] = { 10,"Date", 50, 10, plu.rec.Date };
// code
}
编辑: 我想在我的 main() 中多次使用 edit(),而每次我想要更改的只是 setf[] 中的一些值。那么有没有替代的方法呢?我不想用不同的名字一次又一次地重写同一个函数,而只是改变 setf[]
的值【问题讨论】:
-
大型函数通常不好,您应该考虑将其拆分为更小的函数。这也将有助于解决这个问题,因为您可以创建两个不同的函数,创建具有不同值的结构的不同实例,然后调用包含旧函数主要部分的第二个函数并将结构(或结构)传递为一个论点。
-
与您的问题完全相切:我建议在
fielddesc部分信息的初始化程序周围使用大括号。 -
@JonathanLeffler 更不用说额外的大括号了,因为 OP 似乎正在初始化一个数组......
-
将相关的
editordesc值作为参数传递给edit()函数的修订版本。如果有一个接口要求函数不带参数,那么也许,也许(并且仅在胁迫下)考虑全局变量是否可以向函数传递信息,但这在各方面都是不可取的 -
@Someprogrammerdude — 也是(数组初始化)。拥有一个数组会打开其他选项(将数组索引传递给函数),但也会引发关于“数组是否应该是静态的,因此它只初始化一次,而不是每次调用函数时”的问题。
标签: c function overloading structure