繁体   English   中英

c编程默认参数:const struct vs init函数

[英]c programming default parameters: const struct vs init function

假设我有类似的东西:

typedef struct
{
    int parameter1;
    int parameter2;
    void (fp*)(void);
} STATE_T;

并且我有各种默认参数集,可以在不同的状态下启动程序(或程序的这一部分)。

STATE_T State;

void InitState1()
{
    State.parameter1 = 123;
    State.parameter2 = 321;
    State.fp = Function1;
}
void InitState2()
{
    State.parameter1 = 0;
    State.parameter2 = 1;
    State.fp = Function2;
}

还是使用const结构会更好

const STATE_T STATE1 =
{
    123,
    321,
    Function1
}

const STATE_T STATE2 =
{
    0,
    1,
    Function2
}

我想在第二种情况下,可以使用指针,也可以使用函数来复制选择的设置:

STATE_T * StatePtr;
StatePtr = &STATE1;

要么

void InitState(STATE_T s)
{
    State.parameter1 = s.parameter1;
    State.parameter2 = s.parameter2;
    State.fp = s.fp;
}

输入所有示例后,在我想同时更改所有参数的情况下,使用指向const结构的指针似乎更有效,而init函数仅用于更新所选参数会更好。相关。 还有其他优势或区别需要注意吗?

我通常会静态声明一些静态版本,即

static State State1 = {
  .paramater1 = 123,
  .parameter2 = 321,
  .fp   = NULL,
};

static State State2 = {
  .paramater1 = 999,
  .parameter2 = 111,
  .fp   = NULL,
};

然后在init函数中分配静态变量以获取默认值...

static State * newState(int state) {
  State *foo = calloc(1, sizeof(State));
  assert(foo != NULL);
  if(state == 1) {
    *foo = State1;
    foo->fp = function_fp1;
  }
  else {
    *foo = State2;
    foo->fp = function_fp2;
  }
  return foo;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM