documentation для добавления результатов проверки компилятора для выхода Gnatcheck «s говорит о предупреждениях (с некоторым редактированием)
Для записи предупреждений компилятора (см Предупреждения раздела Контроля сообщений в Руководстве комара пользователя), используйте правило Warnings с параметром, который является допустимым аргументом выражения static_string_ предупреждений о принципах GNAT (см. «Предупреждения Pragma» в Справочном руководстве GNAT). Обратите внимание, что [] в случае gnatcheck s
параметра, что соответствует опции ВНСТ -gnatws
, отключает все специальные предупреждения, но [это] не подавляет эс в режим предупреждения, и [] e
параметр, соответствующий -gnatwe
, что означает «рассматривать предупреждения как ошибки», не имеет никакого эффекта.
Если вы идете смотреть вверх «Прагма предупреждения» в GNAT Reference Manual, вы увидите, что отправит тебя компилятором:
Строка представляет собой список из букв, указывающих, какие предупреждения должны активируется и деактивируется. Код для этих букв совпадает с строкой, используемой в коммутаторе командной строки, с предупреждением [-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.
Существует отличное различие между -gnatwe и -Униминитизировано: в длительной процедуре вы можете создать неинициализированную переменную и после значение, поэтому -gnatwe не обнаруживает это предупреждение. Но благодаря вам я понимаю всю проблему! – user1111
'-gnatwe' означает« обрабатывать все предупреждения как ошибки »;' -gnatw.e' то, что означает «включить все предупреждения, даже действительно неясные» (я перефразирую :). Для большей цели, '-gnatwa' делает все в порядке. –