GCC为结构体成员赋值时出现expected类编译报错的原因查询
错误产生原因
你编写的两行结构体成员赋值代码写在了全局作用域(所有函数之外),不符合C语言的语法要求:C语言只允许在全局作用域中完成变量的声明、定义、初始化操作,不允许直接执行赋值类的可执行语句。编译器会把这两行独立的赋值代码识别为不合法的全局声明语法,因此抛出了该错误。
修复方案
你可以任选以下两种方式修改:
- 方案1:全局变量定义时直接初始化
// 定义全局变量的同时完成成员赋值,符合全局作用域语法规范 ufdm_proactive_cc_glob_t ufdm_procc_globals = { .procc_init_count = 1, .procc_timestamps = NULL };
- 方案2:将赋值逻辑移动到函数内部执行
你可以把赋值操作放到模块初始化函数、main函数等会在变量使用前被调用的函数体内:
// 先定义全局变量,默认会被初始化为全0 ufdm_proactive_cc_glob_t ufdm_procc_globals; // 在初始化函数中完成成员赋值 void ufdm_procc_init(void) { ufdm_procc_globals.procc_init_count = 1; ufdm_procc_globals.procc_timestamps = NULL; }
内容的提问来源于stack exchange,提问作者harish
相关产品推荐
相关产品推荐

