-前提:
我知道它有很多方法可以忽略此警告,但我确实需要修复它,但不只是添加一些标志让编译器忽略它,因为我可以CFLAG
在本地进行此 makefile 修改,但编译/构建策略不能更改由于公司质量控制的原因。这个问题我只是想讨论谁以一种好的方式解决它,但不要忽视他们,非常感谢!
同时,不仅某些变量从未被引用,而且它还有警告:
function 'xxx' was declared but never referenced
头文件中的类似问题,它有一些静态函数,仅在一个 c 文件中使用,但许多其他 c 文件包含此头文件。
此外,此代码在具有关键内存消耗的专用目标上运行,这意味着我需要处理 ROM 和 RAM 中的每一位。
--------问题如下图-----------
我目前构建了一些由供应商提供的代码,其中包含很多警告,因为我想要一个无警告构建,因此,我把-Werror
forgcc
和--diag_error=[error_ref_number]
for armcc
.
经过以上makefile修改后,我目前遇到的最多警告是
variable 'xxx' was declared but never referenced
它是由以下编码风格引起的:
在 中veryBIG.h
,它定义了一些变量,例如(例如,但供应商的代码具有完全相同的方式):
static const int a = 10;
static const int b = 20;
static const int c = 30;
...
static const int z = xx;
但是,许多 c 文件都包含这个 BIG 头文件,但这些 c 文件中只有一个使用上述变量之一,它喜欢a.c
使用变量a
,b.c
使用变量b
等。
我有两种修复方法:
将这些变量移到专用的c文件中,这意味着头文件变得无用
单独的头文件,意味着我创建
a.h
,b.h
, ...,z.h
,并且每个专用 c 文件仅包含上述头文件中的一个
但是,这两种方式对我的工作都有限制,
方式1:
我不确定供应商进一步更新是否会将这个头文件更改为什么或有一些更新值,因为供应商不想修复这个编译警告,这意味着如果我遵循方式 1,我将手动更新这些变量,如果它有由供应商更改(仅在头文件中,我必须将它们同步到 c 文件),这种方式使我进一步的合并工作变得复杂
方式2:
这也使我的进一步合并工作变得不容易,因为我不使用供应商方式,INC
如果这些头文件不在同一个文件夹中(PATH 已经为此定义),我还需要修改系统 makefile 以将这些头文件调整到 PATH veryBIG.h
)
如果有任何想法来克服这个问题?
更新
我可以临时使用Wno-xxx
forgcc
并删除一些[error_ref_number]
in 标志--diag_error
(例如CFLAG += --diag_error=550,223,188,177,....,
,我删除177
for pass this warning in armcc
)并使我的编译继续并首先修复其他警告,但我确实需要修复所有警告。