Jednym słowem: Nie
MISRA ma dostarczyć kilka dobrych wskazówek, ale możesz być lepiej po prostu cherry picking zasady, do których chcesz stosować (zakładając, że masz zautomatyzowane sprawdzanie w Build/analizy statycznej).
Przeglądanie plików MISRA-2004, oto kilka problemów.
Posiadanie wszystkich bibliotek zgodnych z MISRA jest samo w sobie regułą MISRA.
Zasady goto
, continue
i break
, zwrotów funkcji, a wskaźnik arytmetyki są łamane w dosłownie miliardy wierszy zarówno jądra i kodu w przestrzeni użytkownika, więc powodzenia coraz bibliotek (lub jądra) pod zgodności.
Reguły dotyczące rzutowania wskaźnika nie będą możliwe, jeśli używasz gniazd, między innymi typowymi interfejsami API.
MISRA-2004 11.2 Konwersje nie przeprowadza się między wskaźnikiem do obiektu oraz wszelkie typ inny niż integralna typu, inny wskaźnik do obiektu typu lub wskaźnik do unieważnienia.
2004-20.x sekcje zakazu <errno.h>
, <stdio.h>
, <time.h>
i <signal.h>
. Zakaz sygnałów i sprawdzanie błędów promuje programowanie typu BAD Linux, jeśli piszesz długotrwałe, niezawodne usługi.
A żadna dynamiczna alokacja pamięci nie jest gdzieś tam.
wiem MISRA ma reguł, które pozwalają łamać zasady, jeśli ich udokumentowania (jest to prawdą dla wymaganej czy tylko doradczym ???), ale można udokumentować taaaak wiele wyjątków, że jest to naprawdę rodzaj bezcelowy.
Wszystko, co powiedziałeś, jeśli masz klienta nalegającego na zgodność z MISRA (który jest jedynym powodem, dla którego kiedykolwiek widziałem), prawdopodobnie mógłbyś udokumentować wszystkie naruszenia przepisów i wykonać jakąś ręcznie falującą próbę nazywania się Zgodny z MISRA. Więc może istnieć uzasadnienie dla udawania, że jest zgodna z MISRA na Linuksie, ale nie widzę w tym żadnej korzyści technicznej.
Obawiam się, jeśli chcesz być naprawdęzgodny i potrzebują wagi ciężkiej/pełni funkcjonalny system operacyjny jesteś lepiej rozwidlone ciasto na QNX, GHS uczciwość, VxWorks itp
zgodnie tytuł dokumentu, MISRA-C ma zastosowanie do wszystkich * systemów krytycznych * - i może być stosowany do wszelkich aplikacji wykraczających poza ten zakres. Twoje podejście do niektórych zasad (w szczególności do poradników) może być bardziej luźne, jeśli używasz kodu niewłączonego. – Andrew