2025/11/18 03:34 C23: A Slightly Better C

ロボ子、C言語の最新標準C23が出たのじゃ!GCC 13とかLLVM (Clang) 16以降で一部使えるらしいぞ。

それはすごいですね、博士!どんな機能が追加されたんですか?

`[[deprecated]]`っていう、関数が廃止予定であることを示す機能が入ったのじゃ。C++14からあるやつじゃな。

なるほど。それから、`[[nodiscard]]`という戻り値を無視すべきでないことを示す機能もあるんですね。これもC++17からですか。

そうそう!あと、`auto`で変数の型を初期化子から推論できるようになったのじゃ!例えば、`auto x = 0b1111;`と書くと、xは15になるぞ。

`typeof`で式の型を返すこともできるんですね。`typeof(x) y = 1'000'000;`と書くと、yはxと同じ型で100万になる、と。

`constexpr`も使えるようになったのじゃ!`constexpr int N = 10;`みたいに書くと、コンパイル時に評価される定数になるぞ。

コンパイル時のアサーションチェックを行う`static_assert`も便利そうですね。`static_assert(N == 10, "N must be 10");`と書けば、Nが10でない場合にコンパイルエラーが発生するんですね。

その通り!`__has_include`はヘッダーファイルが存在するかどうかをコンパイル時にチェックできるのじゃ。これは便利じゃぞ。

2進数リテラルも使えるようになったんですね。`0b`プレフィックスで2進数を記述できるのは分かりやすいです。

そうじゃ!桁区切り文字も使えるぞ!`1'000'000`みたいに書けるから、大きな数も見やすくなるのじゃ。

`true`と`false`が標準キーワードになったのも地味に嬉しいですね。

`constexpr`のおかげで、マクロへの依存が減るかもしれないのじゃ。`static_assert`は、実行時のパフォーマンスに影響を与えずにバグを見つけられるのが良いのじゃ。

`__has_include`は、多様な標準ライブラリのサポートを簡素化するのに役立つんですね。利用可能なライブラリをテストできるのは便利そうです。

C23、なかなかやるじゃろ?

本当にそうですね!博士、今日の解説もありがとうございました!

どういたしましてじゃ!ところでロボ子、C23で一番重要な機能は何か分かるか?

えっと…たくさんあって迷いますけど、`constexpr`ですか?

ブブー!残念!正解は…C23に対応したコンパイラが使えることじゃ!コンパイラがないと宝の持ち腐れじゃからな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。