2016-06-30 11 views
3

Я хочу иметь неинициализированные переменные в моем gnatcheck сообщить но формат этого предупреждения не совместим с форматом:Как добавить -Внунициализировать в отчете gnatcheck?

+RWarnings:xxxx (с XXXX дифферент предупреждений переключателей)

меня попробовать написать это правила программирования, такие как другие: +RWuninitialized, но это не работает.

И переключатель -Wuninitialized не существует для gnatcheck.

ответ

3

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.

+0

Существует отличное различие между -gnatwe и -Униминитизировано: в длительной процедуре вы можете создать неинициализированную переменную и после значение, поэтому -gnatwe не обнаруживает это предупреждение. Но благодаря вам я понимаю всю проблему! – user1111

+0

'-gnatwe' означает« обрабатывать все предупреждения как ошибки »;' -gnatw.e' то, что означает «включить все предупреждения, даже действительно неясные» (я перефразирую :). Для большей цели, '-gnatwa' делает все в порядке. –