In una parola: No.
MISRA fornisce alcune buone linee guida, ma si sarebbe meglio solo cherry picking regole a cui si desidera aderire (ammesso che abbiate il check-in automatico la vostra analisi build/static).
Scorrendo tra le cose di MISRA-2004, ecco alcune aree problematiche.
Avere tutte le librerie conformi a MISRA è, di per sé, regola MISRA.
Norme in materia di goto
, continue
e break
, funzione ritorna, e l'aritmetica dei puntatori sono violati in letteralmente miliardi di righe di codice sia kernel e userspace, quindi buona fortuna ottenere le librerie (o kernel) in conformità.
Le regole di trasmissione puntatore saranno impossibili da seguire se si utilizzano socket, tra le altre API comuni.
Misra 2004 11.2 conversioni non devono essere eseguite tra un puntatore di opporsi e qualsiasi tipo diverso da un tipo integrale, un altro puntatore a oggetto tipo o un puntatore a void .
2004-20.x sezioni divieto <errno.h>
, <stdio.h>
, <time.h>
e <signal.h>
. Segnali di divieto e controllo degli errori promuovono la programmazione BAD di Linux se si scrivono servizi affidabili e di lunga durata.
E nessuna allocazione di memoria dinamica è una regola da qualche parte.
So MISRA ha delle regole che consentono di violare le regole se li documentare (è questo vale per richiesto o semplicemente consulenza ???), ma avrete documentare soooo molte eccezioni che è davvero una sorta di inutile.
Detto questo, se hai un cliente che insiste sulla conformità MISRA (che è l'unica ragione per cui l'ho mai visto usato), potresti probabilmente documentare tutte le violazioni delle regole e fare qualche tentativo a mano di chiamarti MISRA conforme. Quindi potrebbe esserci un caso aziendale per fingere di essere conforme a MISRA su Linux, ma vedo poco o nessun vantaggio tecnico in esso.
ho paura che se si vuole essere veramente conforme e hanno bisogno di un/OS full-optional pesi massimi è meglio sborsare la pasta per QNX, GHS Integrità, VxWorks, ecc
Come da il titolo del documento, MISRA-C si applica a tutti i * sistemi critici * e può essere utilizzato per qualsiasi applicazione oltre tale ambito. Il tuo approccio ad alcune regole (in particolare gli avvisi) può essere più rilassato se usato su codice non incorporato. – Andrew