我想在 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行禁止显示警告。

08-08 06:23