組込みソフトウェア向けC言語コーディング規約

どうも。ながやすです。

組込みソフト(ファームウェア)向けのc言語コーディング規約を書いています。これをみておけばcの文法的なミス減らせるかなと思います。また、C言語のベテランの方もひとつくらいは新しい発見があると思います。ぜひご参考ください!

コーディング規約一覧

プリプロセッサ編

組込みソフト向けC言語コーディング規約|マクロとプリプロセッサ
組込みソフト向けC言語コーディング規約、プリプロセッサ編です。プリプロセッサは C 言語と違う文法を持っているのでバグの温床となりやすいです。各ルールの理由と、違反例&適合例のソースコード例をまじえて説明しています。

関数の定義と宣言編

組込みソフト向けC言語コーディング規約|関数の定義と宣言
組込みソフト向けC言語コーディング規約、関数編です。関数の定義と宣言の違いや、関数を作るときの定石を書いています。各ルールの理由と、違反例&適合例のソースコード例をまじえて説明しています。

変数の定義と宣言編

組込みソフト向けC言語コーディング規約|変数の定義と宣言
組込みソフト向けC言語コーディング規約、変数の定義と宣言編です。「定義」と「宣言」の違いがあやふやな人にオススメです。各ルールの理由と、違反例&適合例のソースコード例をまじえて説明しています

型の定義編

組込みソフト向けC言語コーディング規約|型の定義(構造体、列挙型、ビットフィールドなど)
組込みソフト向けC言語コーディング規約、型の定義編です。ビットフィールドはびっくりするような仕様なので是非読んでください。各ルールの理由と、違反例&適合例のソースコード例をまじえて説明しています

演算と式編

組込みソフト向けC言語コーディング規約|演算と式
組込みソフト向けC言語コーディング規約、演算と式編です。キャストや浮動小数点、シフトが要注意です。「汎整数拡張」「算術シフト」「暗黙的なキャスト」の理解に役立ちます!各ルールの理由と、違反例&適合例のソースコード例をまじえて説明しています

ポインタ編

組込みソフト向けC言語コーディング規約|ポインタ
組込みソフト向けC言語コーディング規約、ポインタ編です。初心者にとってポインタは鬼門ですね。各ルールの理由と、違反例&適合例のソースコード例をまじえて説明しています。

標準ライブラリ編

組込みソフト向けC言語コーディング規約|標準ライブラリ
この記事では標準ライブラリを使うさいに注意すべきことを記載します。
標準ライブラリ関数で実現できることは標準ライブラリ関数を使用してください。特にメモリ操作系、文字列操作系の関数をわざわざ自作している...

このc言語コーディング規約の目的

このc言語コーディング規約は、組込みソフトウェア向けのC言語コーディング規約について説明します。
C言語の規格には理解しづらい規則が多くあり、それを知らずにコーディングしてバグを出してしまうことがままあります。C言語の規格を理解すればそのようなバグは避けられますが、難解な規格書を読破するには多くの時間を費やさねばなりません。そこでこの書籍では、C言語コーディング規約としてC言語の間違えやすいところを選別して記載し、開発者のみなさんがC言語の細微の規則を理解する手間を省けるようにしています。
つまり、開発者の皆様にこの文書の規約を守っていただくことで、瑣末なC言語の文法的な規則を気にせずに付加価値を高めるための作業に専念していただくことを目的としています。

対象とする人

組込みソフトウェアをC言語でコーディングをする開発者を対象にします。特にμITRONなどの RTOS を使った環境を想定しています。また、CPUはARM系などのRISC CPUを想定しています。ですがOSやCPUに依存するような内容はなく、基本的にC言語に関係することに絞って記載していますので、上記以外の環境でも十分に有用だと思います。

書いていないこと

C言語の文法的なことのみを対象としているので、タスク設計やAPIの設計方針、プロジェクトでのネーミング規則などについては記載していません。また、括弧のつけ方やコメントのつけ方など、ソフトウェアの挙動に直接かかわらないことについてはあえて言及していません。実際のソフトウェアの挙動に直接かかわる注意事項にしぼって記載しています。

参考文献


CERT Cセキュアコーディングスタンダード


組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド


Binary Hacks ―ハッカー秘伝のテクニック100選


C言語ポインタ完全制覇 (標準プログラマーズライブラリ)


SECBOOKS ESCR Ver2.0:【改訂版】組込みソフトウェア開発向けコーディング作法ガイド[C言語版] (SEC BOOKS)


C言語 デバッグ完全解説 (Gihyo Technology)