C言語における定数式の検出:マクロアプローチ
2025-04-22
この記事では、式が定数式かどうかを検出するC言語マクロを作成する様々な方法を探ります。著者は、C23の静的複合リテラル、GNU拡張の`__builtin_constant_p`、`static_assert`、`sizeof`と複合リテラル配列の組み合わせ、`sizeof`と列挙型定数の組み合わせ、そしてコンマ演算子など、いくつかの手法を調査しています。それぞれの方法には長所と短所があり、C23のサポートは限定的であり、`__builtin_constant_p`はGNU拡張に依存し、`static_assert`と`sizeof` の方法は式の型を変更する可能性があり、コンマ演算子は警告を生成します。著者は、完璧な解決策は存在せず、最適な選択は具体的なニーズとC言語の標準バージョンによって決まるという結論に至っています。
開発
定数式