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

标签 c struct initialization

假设我有类似的东西:

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;
}

关于c编程默认参数: const struct vs init function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36296412/

相关文章:

c# - 初始化列表属性的最佳实践?

c++ - 这两行代码有什么区别

c - C 中的结构体变量赋值

c - linux内核中的时间戳错误?

java - 字符串因未知原因被初始化为 0

c++ - 聚合引用成员和临时生命周期

android - 如何理解这个定义宏?

c - 当我使用 '' 关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收 "control-c"

c++ - 如何有效地检索数字的第一个十进制数字

c - 在 C 文件中存储和恢复结构