【问题标题】:Same function for different values of members in a structure结构中成员的不同值的相同功能
【发布时间】: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


【解决方案1】:

有多种方法。

  1. 将结构作为函数的参数。

    void edit(editordesc var);
    

    并调用该函数两次。

  2. 或者有一个结构数组并循环它。

    void edit(void)
    {
       editordesc setf[] = {{ 5,"Description", 40, 0, plu.rec.DESCRIPTION },
                        { 10,"Date", 50, 10, plu.rec.Date }};    
    
        for (unsigned int i = 0; i < sizeof(setf)/sizeof(setf[0]); i++) {
             //printf("%d",setf[i].xpos);
             //your code
        }
    }
    

【讨论】:

  • 是否可以每次只使用 editordesc setf[ ] 数组的一个索引在我的 main() 中多次使用函数 edit() ?如果没有,如何实现?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 2010-11-03
  • 2017-06-11
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
相关资源
最近更新 更多