2026年5月1日

【C 言語】Tiny C Compiler で作るウルトラライトな C 言語開発環境 (あと Nuklear)

アウトドアの世界には、持ち物を 1 グラムでも軽くすることに心血を注ぐ界隈がありまして、「ウルトラライト」(UL) と呼ばれております。朝食・夕食付きの高級温泉宿に一泊すれば快適に過ごせることは自明の真理ですが、一方でバックパック一つに荷物をまとめて、わざわざ山にこもってテント泊する人が絶えないこともまた事実なわけです。私はそこまでエクストリームではありませんが、キャンプ道具にせよソフトウェアにせよウルトラライトなものは大好きです。

で、Windows で C 言語を使ってなんか作りたいんだけど、Visual Studio をインストールするほどでもないしなーと思っていたところ、Tiny C Compiler (以下 TinyCC) というコンパイラを見つけました。公式サイトによれば SMALL! FAST! UNLIMITED! SAFE! ということなので、試しに使ってみました。

開発用 PC

  • CPU: Intel Core i7-9700F CPU @ 3.00GHz
  • RAM: 16.0 GB
  • グラフィックスカード: NVIDIA GeForce RTX 2080 SUPER
  • OS: Windows 11 Home 25H2

※ 自分が試した環境はこうですが、実際はもっと低スペックな環境でも動くと思います。

TinyCC のセットアップとテスト

  1. ダウンロード:
    https://download.savannah.gnu.org/releases/tinycc/
    から tcc-0.9.27-win64-bin.zip をゲットします。
  2. 解凍すると tcc フォルダができるので、適当なパスに置きます。ここでは %HOME%\bin\tcc にしました。
  3. 適当な作業用フォルダ (%HOME%\work とか) を作ってそこにテスト用の C プログラム (hellotcc.c とか) を作成します。
    hellotcc.c
    #include <stdio.h>
    
    main(void)
    {
        printf("hello, tcc!\n");
    }
    
  4. そのフォルダにプロンプトを開くためのバッチファイルを書きます (starttcc.cmd とか)。バッチファイルの中で手順 2 の tcc フォルダへのパスを環境変数 PATH に追加します。
    starttcc.cmd
    @echo off
    set PATH=%HOME%\bin\tcc;%PATH%
    cmd /k cls
    
  5. 作ったバッチファイルをダブルクリックしてプロンプトを開きます。
  6. コンパイルして実行します。
    > tcc hellotcc.c
    > hellotcc.exe
    hello, tcc!
    

tcc フォルダのサイズはたったの 1.8 MB でした。テント泊の人が絶えないわけですね。その代償とでもいいますか、TinyCC はコンパイラ自身の軽量化にパラメーターを全振りしてしまったため、最適化は一切行われないみたいです。

以上になります……と思ったんですが、思いのほかあっさり終わってしまったので、もうちょっとなんかやって誌面を埋めたいと思います。で、以前から気になっていた Nuklear という GUI ライブラリを試してみました。

Nuklear を試す

Nuklear は C 言語から利用可能な GUI ライブラリで、インストール不要、ヘッダファイルを 1 個インクルードするだけでその機能を享受することができるみたいです。ただし Nuklear 自身は描画の命令を吐くだけであって、実際の描画には SDL とか OpenGL のような外部ライブラリの助けが必要……てことらしいです。

SDL (SDL2) のセットアップは次回の記事でやるので、そちらを参照してください。SDL2 のセットアップが済んだものとして話を進めます。

  1. 公式リポジトリから ZIP でソースコードを取得し (git clone でもいいです) 解凍します。
    https://github.com/Immediate-Mode-UI/Nuklear
  2. demo\sdl_renderer\main.c を修正します。SDL2/SDL.h をインクルードしたあとのところに次のように 3 行追加してください。TinyCC で SDL2 を使うのに必要な修正です (詳細は次回)。
    demo/sdl_renderer/main.c (差分)
     #include <SDL2/SDL.h>
    +#ifdef __TINYC__
    +    #undef main
    +#endif
    
  3. starttcc.cmd をダブルクリックしてプロンプトを開き、デモプログラムをコンパイルします。
    > cd Nuklear-master\demo\sdl_renderer
    > tcc main.c -lSDL2 -DSDLCALL= -Ipath\to\SDL2
    

SDL2 を使うので、-l オプションで指定しています。-DSDLCALL= については次回の記事を参照してください。-Ipath\to\SDL2 は nuklear_sdl_renderer.h の次の部分でエラーが発生することの対策です。

nuklear_sdl_renderer.h (抜粋)
#ifndef NK_SDL_RENDERER_SDL_H
#define NK_SDL_RENDERER_SDL_H <SDL.h>
#endif
#include NK_SDL_RENDERER_SDL_H

「path\to\SDL2」の部分は、SDL2 関係のヘッダファイル群をどこに置いたかで変わります (例えば %HOME%\bin\tcc\include\SDL2 とか)。これもまた次回やります。2 行目の「<SDL.h>」を直接「<SDL2/SDL.h>」に修正してもいいと思いますが、ソースコードの修正は極力避けたいということで、-I オプションを使いました。

で、コンパイルできたら実行します。

> main.exe

スクリーンショットは図 1 のような感じでした。モダンとはいえないかもしれませんが、なんとも味わい深いたたずまいです。自作プログラムにちょっと GUI を付けたい、みたいな用途に合うんではないかと思います。

ちなみに、実行時になんかエラーが出たんですが (図 2)、当面 Nuklear を使う予定はないので、見なかったことにしておきます。

図 1
図 1
図 2
図 2

関連記事