代码无语法错误却无法编译?missing-braces错误修复求助
解决GCC编译错误:
missing braces around initializer [-Werror=missing-braces] 你的代码在初始化结构体数组时,每个struct entry实例的成员没有用大括号包裹。GCC的-Werror=missing-braces选项会将这种不规范的初始化触发的警告直接升级为错误,导致编译失败——尽管C标准允许省略大括号的初始化,但严格编译模式下会被拦截。
修复方案(推荐)
给数组中每个结构体实例的初始化值加上大括号,让代码符合严格编译的规范,同时提升可读性:
struct entry { char *lexptr; int token; }; struct entry keywords[] = { {"div", DIV}, {"mod", MOD}, {"if", IF}, {"while", WHILE}, {"then", THEN}, {"do", DO}, {"begin", BEGIN}, {"end", END}, {0, 0} };
临时替代方案(不推荐)
如果不想修改代码,可以在编译命令中移除-Werror=missing-braces选项,或者添加-Wno-missing-braces来禁用该警告。但这种方式会降低代码的规范性,可能隐藏潜在的初始化逻辑问题。
内容的提问来源于stack exchange,提问作者Faris
相关产品推荐
相关产品推荐

