C语言中如何高效初始化多个成员值相同的同结构体变量?
C语言结构体批量初始化相同值的实现方法
你遇到的问题是C语言多变量声明时的初始化规则导致的:当你写tempSens TS1, TS2 = {40.0, 10};,只有TS2会被显式初始化,TS1属于默认初始化(全局变量会被置0,局部变量则是未定义值,多数编译器会默认清0)。以下几种方法可以避免重复写初始化列表:
方法1:使用初始化宏
把重复的初始化列表封装成宏,后续变量初始化直接调用宏即可,后续修改初始值也只需修改宏定义:
#define TEMPSENS_DEFAULT_INIT {40.0, 10} struct tempSens TS1 = TEMPSENS_DEFAULT_INIT, TS2 = TEMPSENS_DEFAULT_INIT;
方法2:使用常量模板结构体
先定义一个const修饰的模板结构体作为初始值基准,再用它初始化目标变量:
const struct tempSens tempSens_default = {40.0, 10}; struct tempSens TS1 = tempSens_default, TS2 = tempSens_default;
这种方式可读性更好,const修饰的模板能防止被意外修改,适合结构体成员较多的场景。
方法3:C99指定初始化器(更健壮)
如果担心结构体成员顺序调整导致初始化错误,可以用C99支持的指定成员初始化器,同样封装成宏:
#define TEMPSENS_DEFAULT_INIT {.temperature = 40.0, .updateTimer = 10} struct tempSens TS1 = TEMPSENS_DEFAULT_INIT, TS2 = TEMPSENS_DEFAULT_INIT;
这种写法不依赖成员顺序,即使后续结构体定义调整,初始化逻辑也不会出错。
内容的提问来源于stack exchange,提问作者Guapz
相关产品推荐
相关产品推荐

