注目★★★★★Lobsters
C++26に #embed 追加、バイナリファイルの埋め込みが標準化
30秒で把握
- 1#embed により C++26 でバイナリファイル埋め込みが標準化・外部ツール不要・4 パラメータで制御可能
- 2GCC は 100 MB ファイル埋め込みで 1.3 秒、従来の xxd ツールは 139 秒・13 GiB メモリ消費
- 3GCC 15 以上・Clang 19+ 実験的対応・MSVC 未対応、ビルドシステム複雑性削減につながる
要約
C++26 は #embed プリプロセッサディレクティブを採用し、バイナリファイルをコンパイル時に整数リストに変換するネイティブ機能を実現した。従来は xxd や objcopy などの外部ツール・スクリプトで対応していたが、#embed により外部ツールと生成ファイルが不要になる。limit・prefix・suffix・if_empty の 4 つのパラメータで、埋め込みサイズの制限、前後の文字列追加、空ファイル時のフォールバック対応を直接記述できる。GCC 15 以上が完全対応、Clang 19+ も実験的サポート。100 MB ファイル埋め込みで GCC は 1.3 秒・117 MiB、従来の xxd 生成コードは 139 秒・13 GiB と大幅な高速化を実現した。
あなたへの影響
証明書・設定ファイル・小さな画像などをバイナリで埋め込む際、これまでのプロジェクト固有の変換ツール・スクリプト依存から解放される。
推奨:C++26 対応プロジェクトでは、ビルドルールを簡潔にしながら埋め込みリソースの同期漏れリスクを排除できるため、来期以降のレガシーコード整理候補として検討の価値がある。