Safe programming. MISRA C\C++ Практика #1
HTML-код
- Опубликовано: 12 сен 2024
- Скачать PVS-Studio бесплатно:
www.viva64.com...
Воспользуйтесь промокодом моего канала: #NR_MISRA и получите бесплатную лицензию анализатора на месяц! Вместо обычной стандартной недельной лицензии.
В практическом видео, на примерах, демонстрировалась работа, смысл правил и анализ с помощью программы статического анализатора кода:
1. MISRA C15.6 - ;
2. MISRA C15.6 - {}
3. MISRA C++ 6-4-1
4. MISRA C15.2 - goto
5. MISRA C8.12 - enum
6. MISRA C17.4 - return
7. MISRA C10.1 - ++
8. MISRA C10.1 - char
9. MISRA C10.4 - signed or unsigned
10.MISRA C10.4 - =
11.MISRA C13.6 - sizeof(n)
12.MISRA C10.3 - size_t
Стандарты из видео:
github.com/nr-...
Если внимательно прочитать правило 15.1. То в нем говорится, что использовать goto не нужно, если оно все таки используется, то это использование регулируется правилами ниже 15.2, 15.3. В правиле 15.2 написано, что переход на метку выше по программе запрещен. Но не написано что он запрещен на переход далее по программе, значит разрешено. И в драйверах ядра Linux, есть код типа такого
func_exec_result_enum func(...)
{
func_exec_result_enum ret = failure_result:
if ()
{
ret = problem1_result;
goto func_ex;
}
ret = ok_result;
func_ex:
return ret;
}
Код вполне допустим по правилам MISRA C.
Если не запрещено, то разрешено. Этот подход безусловно имеет место) Для себя уяснил давно, что, использовать go to можно только для выходы из глубоких циклов/ветвлений и для себя никогда не использую вообще. Спасибо за качественный комментарий и пример.
Смотрите продолжение ;-)