【发布时间】:2016-03-09 08:02:09
【问题描述】:
我的项目必须使用两种不同的编译器进行编译。一个创建 DLL(用于 PC 模拟,Mingw32-gcc-4.7.2),另一个创建 ELF(用于真实硬件)。两种编译器都有部分不同的行为,但我们希望它们尽可能相似,至少在错误方面是这样。 我想在 GCC 中激活一个特定错误,这只是一个警告:
warning: excess elements in array initializer [enabled by default]
有没有办法只将此警告升级为错误?我只找到了激活一组警告的解决方案,而不仅仅是这个。如果我没记错的话,组标志应该在括号中的警告消息后面:[默认启用] ...我不希望所有默认警告都作为错误。
编辑:使用“-Werror=XXX”使其成为活动错误的标志是什么
【问题讨论】:
-
如果你看到例如this GCC online manual about warning flags,您会很早就看到
-Werror=,您可以在其中告诉 GCC 将特定警告转换为错误。 -
我已经看到了 -Werror= 功能。但我认为它只能切换由一个标志控制的一组警告(在警告后放入[]-括号,如:-Werror=undef for "XXX is not defined [-Wundef]")。但是如何将我的特定警告切换为错误?
-
虽然我不知道“多余元素”警告使用什么警告选项,但您可以通过执行
-Werror=undef(对于-Wundef警告选项)将单个警告变成错误。 -
即使在 GCC 5.3.0 中,似乎也没有一个独立的选项可以将该警告变为错误。看起来你必须编写好的 C 并确保没有警告,所以你可以使用
-Werror。或者您必须搜索构建日志才能找到该警告。我试过-std=c11 -pedantic -Wall -Wextra,即使这样似乎也没有触发错误——仍然只是一个警告。这仍然符合标准;发出诊断(警告)——其他情况由实现定义。 -
标准的相关章节是ISO/IEC 9899:2011 §6.7.9 Initialization。第一个约束是:任何初始化程序都不得尝试为未包含在正在初始化的实体中的对象提供值。 数组的初始化程序过多违反了该约束。如果您遇到无法计算初始化程序的问题,您需要学习如何做到这一点。如果您的同事不会数,那么您需要培训他们。如果您的代码生成器无法计数,请修复代码生成器。这种情况应该很少发生——应该被开发者发现。
标签: gcc compiler-errors gcc-warning gcc4.7