2026年9月のKernel Recipes会議において、磁気共鳴画像スキャナーのソフトウェアを開発するバイオメディカルエンジニアリングの教授であるMartin Uecker氏は、C言語における未定義動作を減らす継続的な取り組みについての講演を行った。彼はC言語の歴史の長さを認めたものの、プラットフォーム間での移植性、数十年にわたる安定性、高速なコンパイル、プログラマーの意図に従う機械コードを生成する点で依然として価値がある言語だと主張した——この原則はしばしば「見たままが得られる」(what you see is what you get)と要約される。

Kernel Recipes 2026で講演するMartin Ueckerの写真
Kernel Recipes 2026でC言語における未定義動作を減らす彼の講演を行うMartin Ueckerlwn.net

この画像は、記事の第一段落で言及されているスピーカー、Kernel Recipes 2026でC言語における未定義動作を減らす講演を行ったMartin Ueckerを示している。

Uecker氏は、未定義動作はC規格で定義されていない操作をプログラムが行ったときに発生すると説明した。たとえば初期化されていない変数の読み取り、ゼロによる除算、構造体のパディングバイトへのアクセスなどである。そのような場合、規格はコンパイラに何の要件も課さず、コンパイラは任意の結果を生み出す可能性があり、 colloquially(口語的に)'nasal demons'(鼻の悪魔)を呼び出すと表現される誤った結果にもなり得る。彼は具体例を挙げた:コンパイラはゼロによる除算のテストを削除し単に定数を格納するか、または揮発性変数へのストアより前に除算を再順序付け、除数がゼロのときにプログラムの挙動を変える可能性がある。

これらの問題に対処するため、C規格委員会はメモリオブジェクトモデル、メモリ安全性、未定義動作に焦点を当てた3つの研究グループを維持している。彼らの作業により、現在の規格に存在する約100の未定義動作のうち45件がすでに削除されており、これは進行中のC2y草案に反映されている。最近の改善には、ビット精度の整数型、チェック付き整数演算、ケース範囲、名前付きforループ、配列長を決定する_Countof()マクロなどがある。しかし、C言語での完全なメモリ安全性を達成することは依然として課題である;Uecker氏はこの問題を型安全性、空間的メモリ安全性(境界チェックとcounted_by属性によって部分的に支援される)、時間的メモリ安全性(高価なランタイムチェックまたは形式検証なしではuse-after-freeバグを排除するのは難しい)に分解した。彼は、最も現実的な短期的なアプローチは、制限された言語サブセットと形式検証ツールを組み合わせることだと提案した。