MISRA-C - 組み込み向け標準化規格
C言語について、いろいろと書いてきていますが、その文法や実装には処理系依存というか曖昧な部分が多くあり、特定の環境で動作したとしても他の環境では動作しないという移植性の低さを生み出しています。
特に組み込みと呼ばれる特定のハードウェアで動作させるためには大きな問題で、OSや処理系に依存しにくい書き方として自動車業界が中心となって標準化されているMISRAというものがあります(C++版もあります)。
MISRA C
ネットなどでよく見かけるCのソースコードやオープンソースに含まれるコードも多くの場合、UNIX(Liniux)系であったりWindowsで動作することを前提としているので、十分なOSのサポートがあったり、潤沢なメモリがある前提なものです。動作しているCPUとしてもインテル系であったりArm系、RISC-Vなどが殆どです。またC言語で問題を起こしやすいものとしてバッファオーバーラン、スタックオーバーフロー、そしてメモリリークなどがあり、これらをすべてプログラマの注意力に頼るのではなく、一定に規約に従うことで、その検証やリスクを減らそうというものです。
MISRA-C
MISRA C / MISRA C++
この規約の多くは「何をしてはならない」というもので、Cのコーディングの自由度を制約することで機械的な検出が可能なものです。この規約のポイントは規約を満たしていることを確認するツールが用意されていることで、ツールで検証されていることをもって安全性を担保しようとするものです。
ちょっと面白いのが規約を守っていない部分(規約を守らないほうが信頼性があると認められた場合)は、それを文書化することで許してもらう方法もあるようで、規約を更新するモチベーションにもなり、とても良いやり方に思います。
MISRA C:2023 がリリースされました
普通にコードを書くうえでは、こんな規約を守る必要は無いのですが、安全なコードを書くうえで参考になるものも多く(もっともいろいろな理由で守るのが難しいものもある)、普段のコーディングに取り入れると良さそうです(世の中には char が1バイトでは「ない」処理系もあるようで、そういう実装を許容しないためにもこういう規約は大切)。
ヘッダ画像は、以下のものを使わせていただきました。https://seeklogo.com/vector-logo/458624/misra-c