假设我有类似的东西:
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/