Small Device C Compiler (SDCC) は 2026 年 6 月 22 日 バージョン 4.6.0 をリリースし、1999 年に始まった開発の系譜を継続しています。SDCC はリターゲタブルな最適化 C コンパイラー スイートで、ANSI C89、ISO C99、ISO C11、および策定中の ISO C23 標準を実装しています。32 ビットおよび 64 ビット プロセッサーに焦点を当てたメインストリームのコンパイラーとは異なり、SDCC は埋め込み制御、家電製品、レガシーな産業機器でまだ広く使用されている 8 ビット マイクロコントローラーをターゲットとしています。

GitHub リポジトリからの Small Device C Compiler プロジェクトのバナー画像
GitHub 上の SDCC プロジェクト リポジトリgithub.com

この画像は、記事全体で議論されているオープンソース コンパイラー プロジェクトの視覚的な文脈を提供する、公式の SDCC GitHub リポジトリ (swegener/sdcc) からのものです。SDCC は 1999 年から開発が続いている 8 ビット マイクロコントローラー向けのオープンソースのリターゲタブルな最適化 C コンパイラーです。

### サポートされているアーキテクチャと現在の状況

SDCC の主要なターゲットには、Intel MCS-51 ファミリー (8031, 8032, 8051, 8052)、 Maxim(元 Dallas) DS80C390、Freescale/Motorola HC08 および S08、Zilog Z80 バリアント (Z80, Z180, eZ80, Rabbit 2000/3000/4000, SM83, TLCS-90, R800)、Padauk (pdk14, pdk15)、STMicroelectronics STM8、および MOS 6502 と WDC 65C02 が含まれます。進行中の作業は Rabbit 5000/6000、Padauk pdk13、および f8/f8l ターゲットをカバーしています。PIC16 と PIC18 ポートは未保守としてリストされています。コンパイラーは Linux (amd64, x86, aarch64, ppc64)、macOS (amd64)、および Windows (MinGW を使用したクロスコンパイル) で実行され、FreeBSD aarch64 もテストされています。

### 4.6.0 の新機能

4.6.0 リリースでは、C23 および C2y の機能が多数追加されています:`_Countof` 演算子、8 進リテラル、if 宣言、2 番目のオペランドが省略された条件演算子、ストレージクラス指定子を持つ複合リテラル、符号付きビット精度整数型 (`_BitInt`)、ビット ユーティリティ、`umaxabs`、`uabs`/`ulabs`/`ullabs`、`constexpr`(主に)、`containerof` マクロ、`_Optional` 修飾子、および `va_start` を使用した C23 の可変引数関数です。言語レベルの変更には、プレーンな `int` ビットフィールドを符号付きにすること、`realloc(ptr, 0)` に C99 のセマンティクスを採用すること、宣言された範囲を超える配列パラメータ アクセスに対する警告が含まれます。また、このリリースでは実験的な f8l ポート、Rabbit 4000 向けの新しい r4k ポート、Rabbit 5000/6000 向けの実験的な r5k/r6k ポート、および 1 MB のデータ アドレス スペースを可能にする Rabbit ポートでの `__far` サポートが導入されています。Z80 関連のポートのコード生成は「大幅に改善」され、ez80 ポートは以前の ez80_z80 バリアントに置き換わります。

### 資金調達と開発モデル

SDCC は歴史的に無報酬のボランティアによって開発されてきましたが、大学の従業員が有給時間中に貢献することや、 MCU ベンダーからのハードウェア サンプルの提供による偶発的なサポートがありました。2025 年 10 月、プロジェクトは 2 つの資金助成を発表しました。NGI0 Commons Fund は、Padauk、Rabbit、および Toshiba TLCS ターゲット向けのハードウェア固有の改善、最近の ISO C 規格に関するマシン非依存の作業、ローカル変数のメモリ使用量の最適化、未使用の関数を削除するリンクタイム最適化(これは長年のユーザーからの要望でした)をサポートしています。Sovereign Tech Fund は、組み込みファームウェアの安全性とセキュリティに関する作業を委託しました:セーフ コーディングに関連した最新の C の機能、ポスト量子暗号の準備、サイドチャネルの緩和、およびあまり使用されないコマンドラインの組み合わせの拡張テストです。両プロジェクトは既存の開発者チームが関与しています。

### コミュニティの状況と代替案

長年のユーザーは、SDCC が 2000 年代初頭の PIC16 開発において Hi‑Tech C などの商用コンパイラーの重要な無料の代替手段であったことを覚えています。8051 ポートは、そのアーキテクチャに対する最も優れたオープンソース オプションとして頻繁に引用されますが、一部の開発者は持続的なバグを指摘しています。MOS 6502 ポートは、HC08 バックエンドの修正から始まり、後に Gabriele Gorla によってクリーンアップされマージされました。今日、llvm‑mos や Oscar64 などの代替の 6502 ツールチェーンは、異なる最適化プロファイルを提供しています。PIC10/PIC12 のサポートを求めるリクエストは依然としてオープンです。コンパイラーのコンポーネント スイートには、ASXXXX から派生したリターゲタブルなアセンブラー/リンカー (sdas/sdld)、GCC cpp から派生したプリプロセッサー (sdcpp)、シミュレーター (ucsim)、ソースレベル デバッガー (sdcdb)、および binutils から派生したアーカイブ ユーティリティーが含まれており、これらはすべて GPL または互換性のあるライセンスの下で提供されています。

### 不確実な点

プロジェクトは日付付きの正式なロードマップを公開していないため、Rabbit 5000/6000、Padauk pdk13、および f8/f8l ポートの完了スケジュールは不明です。PIC16/PIC18 ポートは未保守としてマークされていますが、それらの削除または復活の計画は述べられていません。リンクタイム最適化は資金提供されているものの、まだリリースに登場していません。SDCC を独自のコンパイラーと比較して評価するユーザーは、提供されたソースが比較ベンチマークを提供していないため、特定のターゲットに対する現在のコード品質とバグの状況を確認する必要があります。