Если анализ кода Polyspace ® обнаруживает известные или приемлемые дефекты или нарушения правил кодирования, можно подавить дефекты или нарушения в последующих анализах. Добавьте аннотации кода, указывающие на то, что вы просмотрели проблемы и не намерены их устранять.
Аннотации можно добавлять через интерфейс пользователя Polyspace или вводя их непосредственно в коде. Общий рабочий процесс см. в разделе Результаты адресного полипространства с помощью исправлений ошибок или обоснований. В этом разделе показан синтаксис аннотации.
Обратите внимание, что ошибки времени выполнения, обнаруженные с помощью программы проверки кода, нельзя скрыть из исходного кода даже с аннотациями кода. Однако, как и все другие результаты, информация проверки, связанная с ошибкой времени выполнения, извлекается из соответствующей аннотации кода и показывается вместе с результатом.
Для добавления комментариев непосредственно в исходный файл используйте синтаксис аннотаций Polyspace. Синтаксис не учитывает регистр и имеет следующий формат. Оба комментария к стилю C в /* */ и комментарии стиля C++, начиная с // поддерживаются.
Чтобы аннотировать результат в текущей строке кода (включая макросы), используйте следующий синтаксис:
line of code; /* polyspace Family:Result_name */
Аннотации начинаются с ключевого слова polyspace и должны включать Family и Result_name значения полей. При необходимости можно указать Status, Severity, и Comment значения полей.
polyspace Family:Result_name [Status:Severity] "Comment"
Если статус не задан, Полиспейс считает результат выровненным и присваивает ему статус No action planned к результату.
Дополнительные сведения см. в разделах Сведения о синтаксисе аннотаций и Примеры синтаксиса.
Чтобы аннотировать блок кода, используйте следующий синтаксис.
Аннотация для текущей строки кода и n следующие строки:
code; /* polyspace +n Family:Result_name */
Аннотация для блока кода:
/* polyspace-begin Family:Result_name */ code; /* polyspace-end Family:Result_name */
При необходимости укажите состояние, степень серьезности и комментарий.
Если аннотации для результатов с тем же самым Family и Result_name вложены, используется самая внутренняя аннотация.
Например, в этом коде аннотация в строке 9 применяется вместо аннотации блока, но аннотация блока применяется к нарушению в строке 7.
1 /*polyspace-begin MISRA-C:14.9 [To fix:High] "Block annotation"*/ 2 int main(void) 3 { 4 int x = 1; 5 int y = x / 2; 6 7 if (y < 0) /* Block annotation is applied to this violation of MISRA-C:14.9*/ 8 y++; 9 if (x > y) /*polyspace MISRA-C:14.9 [Justified:Low] "Nested annotation applied"*/ 10 return x; 11 return x; 12 } 13 /*polyspace-end MISRA-C:14.9 [To fix:High] "Block annotation"*/ |
Дополнительные сведения см. в разделах Сведения о синтаксисе аннотаций и Примеры синтаксиса.
Для выравнивания нескольких результатов в одной аннотации используйте следующий синтаксис.
Если результаты принадлежат одному семейству, укажите имена результатов, разделенные запятыми.
line of code; /* polyspace Family:Result_1_name,Result_2_name */
Если результаты относятся к разным семействам, укажите имена семейств, разделенных пространствами.
line of code; /* polyspace Family_1:Result_1_name Family_2:Result_2_name */
При необходимости укажите состояние, степень серьезности и комментарий.
Дополнительные сведения см. в разделах Сведения о синтаксисе аннотаций и Примеры синтаксиса.
Чтобы заменить различные поля аннотаций их разрешенными значениями, используйте значения в этой таблице или просмотрите примеры.
| Область | Допустимое значение |
|---|---|
Family | Тип результата анализа:
Чтобы указать все результаты анализа, используйте символ звездочки См. примеры синтаксиса. |
Result_name | Для Для Для Для Для кодирования стандартных нарушений укажите номер правила или номера. Указание всех частей имени результата См. примеры синтаксиса. |
Status | Текст для указания способа устранения ошибки в коде. Это значение заполняет столбец Статус (Status) на панели Список результатов (Results List) следующим образом:
Polyspace подавляет результаты, аннотированные статусом |
Severity | Текст, указывающий на критичность ошибки в коде. Это значение заполняет столбец Серьезность на панели Список результатов следующим образом:
Если указан недопустимый уровень серьезности, Polyspace добавляет его в поле состояния и сохраняет как пользовательский статус. Например, |
Comment | Дополнительный текст, например ключевое слово или объяснение состояния и серьезности. Это значение заполняет столбец Комментарий (Comment) на панели Список результатов (Results List). Дополнительный текст может охватывать более одной строки в коде. При отображении этого текста в отчетах начальные и конечные пробелы в строке объединяются в одно пространство, так что весь текст может быть прочитан как один абзац. |
Введите аннотацию на той же строке, что и дефект, и укажите Family (DEFECT) и Result_name (INT_OVFL). Если статус не задан, Полиспейс присваивает статус No action planned, а затем подавляет результат в последующих анализах.
int var = INT_MAX; var++;/* polyspace DEFECT:INT_OVFL */ |
Оправдать нарушение стандарта кодирования, например, нарушение CERT-C.
Введите аннотацию в той же строке, что и нарушение, и укажите Family (CERT-C) и Result_name (номер правила, например, STR31-C). Присвоение статуса Justified, степень серьезности Low и комментарий.
code; /* polyspace CERT-C:STR31-C [Justified:Low] "Overflow cannot happen
because of external constraints." */ |
Введите аннотацию с помощью +n между polyspace и Family:Result_name записей. Аннотация применяется к одной и той же строке и n следующие строки.
Эта аннотация применяется к строкам 4-7. Число строк включает код, комментарии и пустые строки.
4. code ; // polyspace +3 MISRA2012:*
5. //comment
6.
7. code;
8. code; |
Чтобы аннотировать метрики сложности кода функционального уровня, в определении функции введите аннотацию в той же строке, что и имя функции.
Эта аннотация подавляет все метрики сложности кода для функции func:
char func(char param) { //polyspace CODE-METRICS:*
...
} |
Введите каждое семейство, разделенное помещением. Эта аннотация применяется ко всем правилам 17 C:2012 MISRA и ко всем проверкам времени выполнения.
some code; /* polyspace MISRA2012:17.* RTE:* */ |
После указания Family (DEFECT), введите каждый Result_name разделен запятой.
system("rm ~/.config"); /* polyspace DEFECT:UNSAFE_SYSTEM_CALL,RETURN_NOT_CHECKED */ |
После указания Family и Result_name, можно добавить Comment с дополнительной информацией для обоснования. Можно указать комментарий для всех семейств и имен результатов или комментарий для каждого семейства или имени результата.
//Single comment code; /* polyspace DEFECT:BAD_FREE MISRA2004:* "Comment applies to defect and Misra C:2004 rules" */ //Multiple comments incorrect syntax: code; /* polyspace DEFECT:* "Comment applies to all defects" MISRA2004:5.2 "Comment applies to Misra C: 2004 rule 5.2" */ //Multiple comments correct syntax: code; /* polyspace DEFECT:* "Comment applies to all defects" polyspace MISRA2004:5.2 "Comment applies to Misra C: 2004 rule 5.2" */ |
В аннотациях Polyspace игнорирует весь текст, следующий за двойными кавычками. Чтобы указать дополнительные Family:Result_name, [Status:Severity] или Comment записей, необходимо повторно ввести ключевое слово polyspace после текста в двойных кавычках.
Можно указать допустимые значения или ввести пользовательские значения состояния и степени серьезности. Пользовательская запись серьезности добавляется к состоянию и сохраняется в пользовательском интерфейсе как пользовательское состояние.
//Set Status only code; /* polyspace DEFECT:* [To fix] "some comment" */ //Set Status 'To fix' and Severity 'High' code; /* polyspace VARIABLE:* [To fix: High] "some comment"*/ //Set custom status 'Assigned' and Severity 'Medium' code; /* polyspace MISRA2012:12.* [Assigned: Medium] */ |