我想在 gnatcheck报告中包含未初始化的变量,但是此警告的格式与以下格式不兼容:+RWarnings:xxxx
(使用xxxx进行差异警告开关)
我已经尝试像其他人一样编写此编程规则:+RWuninitialized
,但是它不起作用。
而且-Wuninitialized
开关gnatcheck
不存在。
最佳答案
documentation用于将编译器检查的结果添加到Gnatcheck的输出中,其中包含有关警告的信息(需要进行一些编辑)
要记录编译器警告(请参阅《 GNAT用户指南》中的“警告消息控制”部分),请使用“警告”规则,并将其参数作为GNAT编译指示的有效static_string_expression参数(请参阅《 GNAT参考手册》中的“编译指示”)。请注意,在对应于GNAT s
选项的gnatcheck -gnatws
参数的情况下,将禁用所有特定警告,但[不]不禁止警告模式,而e
参数与-gnatwe
对应,表示“处理”。警告作为错误”,则没有任何效果。
如果您在GNAT Reference Manual中查找“pragma警告”,您会发现它将您带到编译器:
该字符串是字母列表,用于指定要激活和禁用的警告。这些字母的代码与用于控制警告的命令行开关中的字符串[-gnatw
]相同。作为简短摘要,请使用不带任何参数的gnatmake命令,这将生成用法信息,其中包含支持的警告开关列表。
遵循此建议,似乎没有-gnatwx
可以给您-Wuninitialized
的效果。但是,如果您打开所有警告
project Checks is
for Source_Files use ("checks.adb");
package Check is
for Default_Switches ("ada") use
(
"-rules",
"+RWarnings:.e"
);
end Check;
end Checks;
然后运行
procedure Checks (Input : Integer; Result : out Integer) is
X : Integer;
Y : Integer;
Z : Integer;
begin
if (Y > 0) = True then
Result := X;
end if;
end Checks;
你得到
checks.adb:1:19: warning: formal parameter "Input" is not referenced
checks.adb:2:04: warning: variable "X" is read but never assigned
checks.adb:3:04: warning: variable "Y" is read but never assigned
checks.adb:4:04: warning: variable "Z" is never read and never assigned
checks.adb:6:15: warning: comparison with True is redundant
我认为,第2、3(和4)行的警告含义与“未初始化”相同。
然后,您可以关闭不需要的警告;例如,
"+RWarnings:.eF”
将“关闭未引用形式的警告”,并在第1行禁止显示警告。