Offers Magazine
キャリア・スキル

C言語のコーディング規約の主な種類と選び方

公開 更新
執筆者: Offers Magazine 編集部・株式会社overflow
C言語のコーディング規約の主な種類と選び方

C言語のコーディング規約は、命名や書式をそろえて読みやすくする規約と、未定義の動作や脆弱性につながる書き方を避ける安全性の規約に分かれます。代表的な4つの規約は、安全性が重視されるシステム向け、セキュリティ向け、国内の組込み開発向け、Linuxカーネル向けと対象が違い、開発するものに合わせて土台を選ぶのが基本です。

規約ごとの違いと選び方、clang-formatや静的解析ツールで規約をチームに定着させる手順、C言語のスキルを求める Offers の正社員求人の提示年収をまとめました。

O
執筆者

株式会社overflow

Offers Magazine 編集部

Offers Magazine 編集部は、株式会社overflow が運営する転職サービス Offers の編集チームです。エンジニア・PdM・AI人材のキャリア・年収・転職活動に役立つ情報を届けています。

C言語のコーディング規約の目的と決めておく項目

C言語のコーディング規約の目的は、チームの誰が書いても同じように読めるコードにして保守の手間を減らすことと、不具合や脆弱性につながる書き方を前もって避けることの2つです。C言語はメモリを直接扱え、言語規格で動作が定められていない書き方をしてもコンパイルできてしまう場合があるため、書き方の決まりがそのまま品質の差につながります。

規約で決める項目は、大きく次の4つです。

項目

決めること

規約の例

命名

変数・関数・マクロ・型・ファイルの名前の付け方

名前の長さ、略語の使い方、大文字と小文字の使い分け

書式

インデントの幅、1行の長さ、波かっこの位置、空白の入れ方

Linuxカーネルはインデントに8文字幅のタブを使い、1行80桁を目安にする

言語機能の使い方

ポインタ、型変換、マクロ、動的メモリの使い方

複数の文からなるマクロは do-while ループで包む

禁止事項

未定義の動作や脆弱性につながる書き方

予約済み識別子の宣言や定義をしない

命名と書式は好みで議論が割れやすく、言語機能の使い方と禁止事項は不具合に直結する項目です。前者は clang-format のような整形ツールで、後者は静的解析ツールで機械的に検査できるため、規約を決めるときは、どのツールで守るかまで一緒に決めておくと運用が楽になります。

C言語で安全性の規約が重視される理由

C言語で安全性の規約が重視されるのは、配列の範囲外へのアクセスや解放済みのメモリの使用といった誤りを言語の側で止める仕組みが少なく、そうした誤りが脆弱性につながりやすいためです。米カーネギーメロン大学のソフトウェア工学研究所(SEI: Software Engineering Institute)の CERT(Computer Emergency Response Team)部門がまとめ、JPCERTコーディネーションセンター(JPCERT/CC)が日本語版を公開している SEI CERT C コーディングスタンダードは、脆弱性につながる恐れのある危険なコーディング作法や未定義の動作を減らすことを目的に掲げています(JPCERT/CC・2026年11月確認)。表の言語機能と禁止事項の例も、この規約のプリプロセッサ(PRE: Preprocessor)の項目 PRE10-C と、宣言と初期化(DCL: Declarations and Initialization)の項目 DCL37-C から引きました。

国内の組込み開発向けの IPA(情報処理推進機構)の ESCR(Embedded System development Coding Reference)も、Ver. 3.0 で「ソフトウェアの脆弱性作りこみを回避すること」を目的に加えました(IPA・2026年11月確認)。IoT の広がりで組込み製品にもセキュリティを意識した実装が求められるようになったことが、改訂の背景として挙げられています(IPA「ESCR Ver. 3.0」)。

C言語の主なコーディング規約4つの特徴

C言語で参照される主な規約は、MISRA(The Motor Industry Software Reliability Association)が発行する MISRA C:2025、SEI CERT C コーディングスタンダード、IPA の ESCR Ver. 3.0、Linuxカーネルのコーディングスタイルの4つです。向いている開発、前提にするC言語の規格、入手の方法が規約ごとに違います(各規約の公式ページ・2026年11月確認)。

規約

発行元

向いている開発

前提のC言語の規格

入手

MISRA C:2025

MISRA

安全性が重視されるシステム

C11・C18と、それ以前の規格

MISRA のウェブストアで購入

SEI CERT C コーディングスタンダード

米カーネギーメロン大学の SEI

セキュリティを重視する開発

C11(C99 にも適用できる)

無償で公開(JPCERT/CC の日本語版あり)

ESCR Ver. 3.0(C言語版)

IPA

国内の組込みソフトウェア

C99

電子版を無償で公開(書籍は2024年4月に販売終了)

Linuxカーネルのコーディングスタイル

Linuxカーネルの開発コミュニティ

Linuxカーネルとドライバの開発

―

無償で公開

MISRA C:2025は安全性が重視されるシステム向けの最新の改訂

MISRA C:2025は、安全性が重視されるシステムでC言語を使うためのガイドラインで、2025年3月に公開された、2026年11月時点で最新の改訂です(MISRA・2026年11月確認)。2023年・2019年・2012年・2004年・1998年に出た以前の MISRA C の文書を、すべて置き換えるものと位置づけられています。

MISRA C:2023 からの変更は小幅な改訂で、C11 と C18、それ以前のC言語の規格を引き続き対象にしています(MISRA C)。文書の入手先は MISRA のウェブストアです。

既存のプロジェクトが MISRA C:2012 や MISRA C:2023 に準拠している場合は、どの年の MISRA C に準拠する約束なのかを契約や社内の規定で確かめてから MISRA C:2025 へ移ります。検査に使う静的解析ツールがMISRA C:2025 のルールに対応しているかも、ツールの資料で確かめておくと確実です。

SEI CERT Cはセキュリティの欠陥を減らすための規約

SEI CERT C コーディングスタンダードは、米カーネギーメロン大学の SEI が策定した、C言語でセキュアコーディングを行うためのルールとレコメンデーションをまとめた規約です。C11 を前提に作られ、C99 で書かれた既存のコードの改修にも使えるとされています(SEI CERT C Coding Standard: Scope・2026年11月確認)。

日本語版は JPCERT/CC が公開しており、プリプロセッサ、宣言と初期化、整数(INT: Integers)、メモリ管理(MEM: Memory Management)といった分類ごとに項目が並びます。レコメンデーションの PRE10-C は「複数の文からなるマクロは do-while ループで包む」、ルールの DCL37-C は「予約済み識別子の宣言や定義をしない」と定める項目です。

外部からの入力を受け取るサーバーやネットワーク機器のソフトウェアでは、CERT C のルールを土台に加えると、脆弱性につながる書き方を検査で拾いやすくなります。セキュリティの観点から規約を考える流れは「なぜセキュアコーディング規約は大切なのか?検証法やツールも紹介」で詳しく扱いました。

IPAのESCR Ver. 3.0は国内の組込み開発向けのコーディング作法

ESCR Ver. 3.0は、IPA のソフトウェア高信頼化センターが2018年6月29日に発行した、C言語で組込みソフトウェアを書くときのコーディング作法ガイドです(IPA・2026年11月確認)。コーディングの際に注意すべきことやノウハウを、適合例と不適合例を添えて解説しています。

ESCR は Ver. 2.0 で対応するC言語の規格を C99 にし、MISRA C:2012 を受けて改訂されました。Ver. 3.0 では、CERT C のルールと、IPA のセキュリティセンターが脆弱性対策として提案するルールが加わりました(IPA「ESCR Ver. 3.0」)。

書籍版(定価1,528円・税込)は2024年4月1日に販売を終え、電子版(PDF)は IPA のアーカイブのページから無償でダウンロードできます。ESCR・MISRA・CERT と CWE(Common Weakness Enumeration・ソフトウェアの弱点の種類の一覧)の対応表(PDF)も同じページにあり、ESCR を土台に選べば、ほかの規約のどのルールと重なるかを確かめながら自分たちの規約を組み立てられる点も利点です。

ESCR には C++ 版(ESCR C++ Ver. 2.0)もあり、C言語と共通の部分は C言語版の Ver. 2.0 と記述を合わせてあります(IPA)。C++ の規約の違いと選び方は「C++のコーディング規約の主な種類とチームでの決め方」にまとめています。

Linuxカーネルのコーディングスタイルは理由つきで書式を決めている

Linuxカーネルのコーディングスタイルは、Linuxカーネルにコードを送るときに従う規約で、書式の決まりをその理由とともに書いている点が特徴です。インデントには8文字幅のタブを使い、1行の長さは80桁を目安にし、読みやすさが大きく上がる場合を除いて80桁を超える文は折り返すと定めています(Linux kernel coding style・2026年11月確認)。

規約の文書は、規約に沿った整形や書式の誤りの発見に clang-format を使えると案内しています。カーネル以外の開発でこの書式に合わせるときも、clang-format に同じ書式を設定しておけば、手で合わせる手間は要りません。

C言語のコーディング規約は既存の規約と開発対象で選ぶ

C言語のコーディング規約は、プロジェクトに既存の規約があるかと、何を開発するかの2点で選ぶと迷いません。プロジェクトや顧客が定めた規約があればそれが最優先で、新しく決めるときは開発対象に合った安全性の規約を土台にし、書式は整形ツールの設定で決めます。

状況

土台にする規約

理由

プロジェクトや顧客が定めた規約がある

その規約と既存コードの書き方

規約どうしでルールが食い違うときの判断の基準を1つにできる

安全性が重視されるシステム

MISRA C:2025

安全性が重視されるシステム向けの最新の改訂

外部からの入力を扱い、脆弱性を避けたい

SEI CERT C

危険な作法と未定義の動作を減らすことが目的

国内の組込み開発で、日本語の解説を手元に置きたい

ESCR Ver. 3.0

適合例と不適合例が日本語で読め、MISRA・CERT との対応表がある

Linuxカーネルやドライバを開発する

Linuxカーネルのコーディングスタイル

カーネルに送るコードはカーネルの規約に従う

規約どうしが食い違うときはプロジェクトの規約を優先する

C言語には複数の規約があり、同じ項目でも規約によって決め方が違うため、どれを優先するかを作業の前に決めておく必要があります。プロジェクトや顧客が定めた規約があればそれに従い、一般の規約は、プロジェクトの規約が決めていない項目を補うものとして使うのが基本です。

一般の規約から一部のルールを外すときは、外したルールとその理由をプロジェクトの規約の文書に書いておきます。理由が残っていないと、あとから入ったメンバーがそのルールに従うべきかを判断できず、レビューのたびに同じ議論が起きるからです。

判断に迷うルールは、作業に入る前にテックリードやプロジェクトの責任者と決めておくと、書き直しの手戻りを防げます。

C言語のスキルを求める正社員求人と提示年収

Offers の正社員求人で、スキル欄にC言語を必須・歓迎・スキルスタックとして登録した求人の提示年収は、年収下限の中央値が420万円、年収上限の中央値が800万円で、上限が800万円以上の求人は60.4%でした(Offers(株式会社overflow)調べ・スキル欄にC言語を登録し年収の下限と上限を記載した正社員求人 n=91・2022年9月〜2026年10月公開)。

指標

値

年収下限の中央値

420万円

年収上限の中央値

800万円

年収上限が800万円以上の求人の割合

60.4%

年収上限が1,000万円以上の求人の割合

22.0%

スキル欄にC言語を登録した91件のうち59件はスキル欄に C++ も登録しており、C と C++ をあわせて扱える人を求める求人が多い結果です(Offers(株式会社overflow)調べ・スキル欄にC言語を登録した正社員求人 n=91・2022年9月〜2026年10月公開)。

規約の経験を選考で伝えるなら、どの規約を土台に選び、なぜそのルールを外し、どのツールでチームに定着させたか(ツールでの守り方は次の節)を、レビューや CI(継続的インテグレーション)の仕組みとあわせて説明すると、コードの品質をそろえる仕事の経験として伝わります。転職の選考でコードを書く試験への備え方は「コーディングテスト対策|転職選考での備え方」にまとめています。

組込みの開発経験を生かせる求人は、組み込みエンジニアの転職・求人情報の一覧から探すのが近道です。Offers に経歴を登録しておくと、C言語での開発や規約づくりの経験に対して、どんな企業からどんな職名と提示年収でオファーが届くかで、市場での評価を確かめられます。

ツールでC言語の規約を守る手順

C言語の規約は、文書にして配るだけでは守られ続けません。書式は整形ツールで自動にし、安全性のルールは静的解析ツールで CI に組み込み、コードレビューでは機械が見られない設計と命名に集中する、と受け持ちを分けると、規約がチームに定着します。

書式はclang-formatで自動整形にする

書式のルールは、clang-format の設定ファイル(.clang-format)をリポジトリに置き、保存時やコミット前に自動で整形する形にすると、レビューで書式を指摘し合う手間がなくなります。設定は既定のスタイルを BasedOnStyle で指定し、変えたい項目だけを書き足すのが基本です(Clang-Format Style Options・2026年11月確認)。

LLVM(コンパイラ基盤のプロジェクト)のスタイルを土台にインデントだけ4文字にするなら、.clang-format に次の2行を書きます。

BasedOnStyle: LLVM
IndentWidth: 4

整形ツールの出力をそのまま正とする合意をチームで先に作っておくと、書式をめぐる議論はほとんど起きません。

安全性のルールは静的解析ツールでCIに組み込む

言語機能の使い方と禁止事項のルールは、静的解析ツールで検査し、CI でプルリクエストごとに走らせると、人の目に頼らずに守られる状態を作れます。clang-tidy には、CERT の規約に関するチェックの群(cert-)と、不具合につながりやすい書き方を見つけるチェックの群(bugprone-)があります(Clang-Tidy・2026年11月確認)。

この2つの群だけを有効にするなら、.clang-tidy に次の1行を書き、いったんすべてのチェックを外してから必要な群を足す形にします。

Checks: '-*,cert-*,bugprone-*'

最初は警告として流し、件数を見ながら少しずつエラーへ上げていくと、開発を止めずに導入できます。MISRA C:2025 への準拠を確かめたいときは、MISRA のルールへの対応をうたう静的解析ツールを使い、どの年の MISRA C に対応しているかを導入の前にツールの資料で確かめておくのが安全です。

コードレビューでは設計と命名の意図に集中する

書式と言語機能の検査を機械に任せると、コードレビューでは、関数の責務の分け方や名前が意図を表しているかといった、ツールでは判定しにくい点に時間を使えます。ESCR Ver. 3.0 も、規約の策定やコーディング技法とあわせて、レビューのときに注意すべきポイントを説明しています。

規約は一度決めて終わりではありません。使うC言語の規格を新しくするとき、土台にした規約に新しい改訂が出たとき(MISRA C:2023 から MISRA C:2025 への改訂など)、外したルールが増えてきたときが見直しの合図です。見直しの議論と決定の記録を残すところまでが、規約を運用する人の仕事になります。

C言語のコーディング規約の要点

C言語のコーディング規約は、読みやすさと安全性の2つの目的で分けて考え、プロジェクトの規約と開発対象に合わせて土台を選ぶのが基本です。

  • 規約は、命名や書式をそろえる規約と、未定義の動作や脆弱性につながる書き方を避ける安全性の規約に分かれる
  • 安全性が重視されるシステムなら MISRA C:2025、セキュリティを重視するなら SEI CERT C、国内の組込み開発なら IPA の ESCR Ver. 3.0、Linuxカーネルならカーネルの規約を土台にする
  • プロジェクトや顧客の規約があればそれを最優先にし、一般の規約から外すルールは理由とともに1か所に書く
  • 書式は clang-format、安全性は静的解析ツールと CI、設計と命名はコードレビューと、受け持ちを分けて守る

Offers(株式会社overflow が運営)は、エンジニア・AI人材・PdM などITプロダクト職の正社員転職に特化したサービスです。C言語での開発やチームの規約づくりを担ってきた経験を次の職場でどう生かせるかは、Offers で届くオファーの職名と提示年収から確かめられます。

AI 時代のエンジニア転職は Offers で

あなたのキャリアに合った求人やスカウトが届く、エンジニア向け転職サービスです。

無料ではじめる

正社員の求人を探す

Offers Jobs で正社員の求人を探せます。

求人を見る

Offers のイベント情報

イベント情報を見る

エンジニアの転職なら Offers

無料ではじめる

記事一覧へ