2026-01-11 20:30:34
諏訪子
low-level
c
c++

【C言語・C++】C23とC++23の概要

C23が公開されてから既に1年以上が経過しました。
然し今日に至るまで、殆どのコンパイラは依然としてC99をデフォルトとしている為(GCC 15以降を除く)、Cの規格変更はC++に比べて非常に小規模である事もあり、C23は殆ど注目されずに過ぎてしまいました。
一方でC++は毎回大きな話題となり、特にC++11とC++17が「最高のバージョン」、C++20が「最悪のバージョン」として最も注目を集めています。
ところが規格文書を詳しく見てみると、C23には非常に魅力的な「C++っぽい」変更がいくつも入っており、此れによってC23はかなり軽量なC++の様な言語になった印象を受けます!

C++23にも独自の進化はありましたが、此処では主にC23の変更点に焦点を当て、今後の言語選択にどの様な影響を与える可能性があるのか考えてみたいと思います。

ゲーム開発では依然としてC++が王者

ゲーム開発ではC++が圧倒的な支配力を保っています。
其れにはしっかりした理由があります。
「世界で最も肥大化した言語」という悪名高いイメージはある物の、実際のところ非常に速く、RustやZigほど開発の邪魔をしない点が大きいです。
又「不安全」という古いイメージも、C++11以降徐々に改善されてきています。

C23の進化がこのまま続けば、今後10年くらいのスパンでゲーム業界においてC++の代わりにCがもっと広く使われる可能性も見えてきます。
其れは「肥大化しないC++の代替」として非常に魅力的な位置づけになるでしょう。

組み込み分野では依然としてCが王者

極端にリソースの限られたハードウェアを扱う組み込み系では、Cの真価が最も発揮されます。
C23の変更は便利ではありますが、あんま多くの機能を追加し過ぎると逆に採用が進まず、組み込み開発者はC99やC11に留まる可能性もあります。

C23の主な新機能

C99以来最大のアップデートです。
言語の近代化、安全性の向上、C++からのアイデア借用、実用的な利便性向上に重点が置かれています。
Cの基本哲学を大きく変える物ではありませんが、表現力・型安全性・移植性を向上させる便利な道具が追加されました。

機能名 説明
nullptr 安全なヌルポインタリテラル(NULLの置き換え)。intへの暗黙変換を防ぐ int *p = nullptr;
true/false 真偽値リテラルがキーワードに bool isInit = false;
auto 変数宣言時の型推論(関数引数・戻り値には使用不可) auto foo = 76;
typeof 型の推論を行う標準化された演算子 typeof(76) y = 100;
2進数リテラル 0bプレフィックスで2進数表記 int bin = 0b1010;
桁区切り文字 可読性向上の為の区切り文字 int oku = 1'000'000'000;
_BitInt(N) 任意の正確なビット幅の整数 _BitInt(128) big = 1;
属性 C++風の属性構文 [[noreturn]][[deprecated]] [[noreturn]] void f(int i);
__has_include & __has_c_attribute ヘッダー・属性の存在チェック #if __has_include(<stdio.h>)
constexpr 定数式初期化子で使える constexpr int max = 9000;
可変長修正型 必須対応に昇格 int arr[const N]
unreachable() 「此処には絶対到達しない」とコンパイラに伝える(最適化用) if (false) unreachable();
static_assert マクロから本物のキーワードに昇格 static_assert(sizeof(int) == 4);

主なライブラリ追加

  • 新ヘッダー: <stdbit.h> (popcount等のビット操作)、 <stdckdint.h> (オーバーフロー検出付き整数演算)
  • UTF-8対応: char8_t 型、 mbrtoc8()c8rtomb().
  • 10進浮動小数点: _Decimal32/64/128(IEEE 754-2008準拠)
  • 安全性関数: memsetexplicit() (確実なゼロクリア)、境界チェック付き文字列関数 ()strncpys等)
  • 時刻: timespec_getres() (ナノ秒精度対応)
  • 非推奨/削除: 非正規化数マクロの非推奨化、古い realloc 挙動の安全性のための制限

コンパイラ対応状況

  • GCC 15以降、Clang 16以降 → ほぼ完全対応
  • MSVC、Apple Clang → 対応しているがかなり機能が不足(特にMSVCは貧弱)

C++23の主な新機能

C++20のモジュール・コンセプトを基盤に、使い易さ・パフォーマンス・安全性に焦点を当てた改良です。

機能名 説明
明示的thisメンバ関数 this を明示的に書ける、CRTPが綺麗に auto add(auto &self, int x) -> auto & { return self + x; }
多次元添字演算子 a[i,j] の様なコンマ区切りが可能 struct Mat { auto operator[](std::sizet i, std::sizet j) {} };
Static operator[] staticメンバ関数からも呼び出し可能 struct S { static auto operator[](this S self) {} };
ラムダの簡略化 ()不要、属性をコールオペレータに付与可能 auto lam = [](int x) { return x * 2; }
暗黙moveの修正 rangesやforループでのprvalue/xvalueの挙動が一貫 な一時オブジェクトの束縛が減少
#elifdef/#elifndef C23から借用したプリプロセッサ条件 #ifdef(FOO) #elifdef(BAR) #endif
非リテラルもconstexprに 変数・ラベル・gotoもconstexpr内で使用可(実行時評価もあり) constexpr void foo() { int x = 1; if (x) goto label; label : }
Unicodeの改善 ワイド文字列の扱い改善等 std::wstringの扱いが向上

主なライブラリ追加

  • Ranges強化(find_last, contains, fold系、move-only対応ビュー、std::span::ssize()
  • std::expected(monadicエラー処理)
  • std::mdspan(多次元配列ビュー)
  • std::print / std::println(安全な書式付き出力、同期出力対応)
  • std::format強化
  • std::flatmap / std::flatset(キャッシュに優しいvectorベース)
  • import std;(全標準ライブラリ一括インポート・高速コンパイル)
  • 其の他:std::stacktracestd::byteswap、atomic_ref等

コンパイラ対応状況

  • GCC 14以降、Clang 17以降、MSVC 2022以降

C23コードの例え

#if __has_include(<stdio.h>)
#include <stdio.h>
#else
#error "<stdio.h>を見つけられません。"
#endif

int main(void) {
  auto nrgb = nullptr;
  auto rgb = 0b1010;
  printf("rgb: %d\n", rgb); // 10

  constexpr float r = 23.5f;
  constexpr float g = 54.f;
  constexpr float b = r * g;
  printf("B: %.02f\n", b); // 1269.00

  printf("true: %d\n", true); // 1

  return 0;
}

$ cc -std=c23 c23.c -o c23
$ ./c23
rgb: 10
B: 1269.00
true: 1
$ ls -thal c23
-rwxr-xr-x  1 suwako suwako   10K 11月 12 16:21 c23
$ strip c23
$ objdump -M intel -d c23 | less
$ ls -thal c23
-rwxr-xr-x  1 suwako suwako  4.7K 11月 12 16:37 c23
$ objdump -M intel -d c23 | less
  2016d0: 55                            push    rbp
  2016d1: 48 89 e5                      mov     rbp, rsp
  2016d4: 48 83 ec 20                   sub     rsp, 0x20
  2016d8: c7 45 fc 00 00 00 00          mov     dword ptr [rbp - 0x4], 0x0
  2016df: 48 c7 45 f0 00 00 00 00       mov     qword ptr [rbp - 0x10], 0x0
  2016e7: c7 45 ec 0a 00 00 00          mov     dword ptr [rbp - 0x14], 0xa
  2016ee: 8b 75 ec                      mov     esi, dword ptr [rbp - 0x14]
  2016f1: 48 bf d9 04 20 00 00 00 00 00 movabs  rdi, 0x2004d9
  2016fb: b0 00                         mov     al, 0x0
  2016fd: e8 fe 00 00 00                call    0x201800 <printf@plt>
  201702: f3 0f 10 05 f6 ed ff ff       movss   xmm0, dword ptr [rip - 0x120a] # 0x200500
  20170a: f3 0f 11 45 e8                movss   dword ptr [rbp - 0x18], xmm0
  20170f: f3 0f 10 05 ed ed ff ff       movss   xmm0, dword ptr [rip - 0x1213] # 0x200504
  201717: f3 0f 11 45 e4                movss   dword ptr [rbp - 0x1c], xmm0
  20171c: f3 0f 10 05 e4 ed ff ff       movss   xmm0, dword ptr [rip - 0x121c] # 0x200508
  201724: f3 0f 11 45 e0                movss   dword ptr [rbp - 0x20], xmm0
  201729: 48 bf ec 04 20 00 00 00 00 00 movabs  rdi, 0x2004ec
  201733: f2 0f 10 05 bd ed ff ff       movsd   xmm0, qword ptr [rip - 0x1243] # 0x2004f8
  20173b: b0 01                         mov     al, 0x1
  20173d: e8 be 00 00 00                call    0x201800 <printf@plt>
  201742: 48 bf e2 04 20 00 00 00 00 00 movabs  rdi, 0x2004e2
  20174c: be 01 00 00 00                mov     esi, 0x1
  201751: b0 00                         mov     al, 0x0
  201753: e8 a8 00 00 00                call    0x201800 <printf@plt>
  201758: 31 c0                         xor     eax, eax
  20175a: 48 83 c4 20                   add     rsp, 0x20
  20175e: 5d                            pop     rbp
  20175f: c3                            ret

C++23コードの例え

#include <print>
#include <unordered_map>
#include <string>
#include <numeric>

int main(void) {
  std::unordered_map<std::string, double> country_sizes = {
    {"アメリカ", 9833517},
    {"カナダ", 9984670},
    {"オーストラリア", 7692024},
    {"中国", 9596961},
    {"ポーランド", 312696},
  };

  constexpr double KM_TO_MI = 0.386102;

  const double total_km = std::accumulate(country_sizes.begin(), country_sizes.end(), 0.0, [](double sum, const auto &entry) { return sum + entry.second; });
  const double total_mi = total_km * KM_TO_MI;

  std::println("{:<15} | {:>15} | {:>15}", "国", "サイズ (km²)", "サイズ (mi²)");
  std::println("{:-<15}-+-{:-<15}-+-{:-<15}", "", "", "");

  for (const auto &[country, size_km] : country_sizes) {
    double size_mi = size_km * KM_TO_MI;
    std::println("{:<15} | {:>15.0f} | {:>15.2f}", country, size_km, size_mi);
  }

  std::println("{:-<15}-+-{:-<15}-+-{:-<15}", "", "", "");
  std::println("{:<15} | {:>15.0f} | {:>15.2f}", "合格", total_km, total_mi);

  return 0;
}

$ c++ -std=c++23 cpp23.cc -o cpp23
$ ./cpp23
国              |    サイズ (km²) |    サイズ (mi²)
----------------+-----------------+----------------
ポーランド      |          312696 |       120732.55
中国            |         9596961 |      3705405.84
オーストラリア  |         7692024 |      2969905.85
カナダ          |         9984670 |      3855101.06
アメリカ        |         9833517 |      3796740.58
----------------+-----------------+----------------
合格            |        37419868 |     14447885.87
$ ls -thal cpp23
-rwxr-xr-x  1 suwako suwako  377K 11月 12 16:32 cpp23
$ strip cpp23
$ ls -thal cpp23
-rwxr-xr-x  1 suwako suwako  185K 11月 12 16:39 cpp23
$ objdump -M intel -d cpp23 | less
  211790: 55                            push    rbp
  211791: 48 89 e5                      mov     rbp, rsp
  211794: 48 81 ec 30 02 00 00          sub     rsp, 0x230
  21179b: c7 45 fc 00 00 00 00          mov     dword ptr [rbp - 0x4], 0x0
  2117a2: 48 8d bd 20 ff ff ff          lea     rdi, [rbp - 0xe0]
  2117a9: 48 89 bd 18 ff ff ff          mov     qword ptr [rbp - 0xe8], rdi
  2117b0: c7 85 14 ff ff ff 2d 0c 96 00 mov     dword ptr [rbp - 0xec], 0x960c2d
  2117ba: be bf 1a 20 00                mov     esi, 0x201abf
  2117bf: 48 8d 95 14 ff ff ff          lea     rdx, [rbp - 0xec]
  2117c6: e8 55 05 00 00                call    0x211d20 <.text+0x640>
  2117cb: eb 00                         jmp     0x2117cd <.text+0xed>
  2117cd: 48 8d bd 40 ff ff ff          lea     rdi, [rbp - 0xc0]
  2117d4: 48 89 bd 18 ff ff ff          mov     qword ptr [rbp - 0xe8], rdi
  2117db: c7 85 00 ff ff ff 9e 5a 98 00 mov     dword ptr [rbp - 0x100], 0x985a9e
  2117e5: be 39 1d 20 00                mov     esi, 0x201d39
  2117ea: 48 8d 95 00 ff ff ff          lea     rdx, [rbp - 0x100]
  2117f1: e8 7a 05 00 00                call    0x211d70 <.text+0x690>
  2117f6: eb 00                         jmp     0x2117f8 <.text+0x118>
  2117f8: 48 8d bd 60 ff ff ff          lea     rdi, [rbp - 0xa0]
  2117ff: 48 89 bd 18 ff ff ff          mov     qword ptr [rbp - 0xe8], rdi
  211806: c7 85 fc fe ff ff f8 5e 75 00 mov     dword ptr [rbp - 0x104], 0x755ef8
  211810: be 87 1d 20 00                mov     esi, 0x201d87
  211815: 48 8d 95 fc fe ff ff          lea     rdx, [rbp - 0x104]
  21181c: e8 9f 05 00 00                call    0x211dc0 <.text+0x6e0>
  211821: eb 00                         jmp     0x211823 <.text+0x143>
  211823: 48 8d 7d 80                   lea     rdi, [rbp - 0x80]
  211827: 48 89 bd 18 ff ff ff          mov     qword ptr [rbp - 0xe8], rdi
  21182e: c7 85 f8 fe ff ff 21 70 92 00 mov     dword ptr [rbp - 0x108], 0x927021
  211838: be e3 19 20 00                mov     esi, 0x2019e3
  21183d: 48 8d 95 f8 fe ff ff          lea     rdx, [rbp - 0x108]
  211844: e8 c7 05 00 00                call    0x211e10 <.text+0x730>
  211849: eb 00                         jmp     0x21184b <.text+0x16b>
  21184b: 48 8d 7d a0                   lea     rdi, [rbp - 0x60]
  21184f: 48 89 bd 18 ff ff ff          mov     qword ptr [rbp - 0xe8], rdi
  211856: c7 85 f4 fe ff ff 78 c5 04 00 mov     dword ptr [rbp - 0x10c], 0x4c578
  211860: be ff 1c 20 00                mov     esi, 0x201cff
  211865: 48 8d 95 f4 fe ff ff          lea     rdx, [rbp - 0x10c]
  21186c: e8 ef 05 00 00                call    0x211e60 <.text+0x780>
  211871: eb 00                         jmp     0x211873 <.text+0x193>
  211873: 48 8d 85 20 ff ff ff          lea     rax, [rbp - 0xe0]
  21187a: 48 89 45 c0                   mov     qword ptr [rbp - 0x40], rax
  21187e: 48 c7 45 c8 05 00 00 00       mov     qword ptr [rbp - 0x38], 0x5
  211886: 48 8b 75 c0                   mov     rsi, qword ptr [rbp - 0x40]
  21188a: 48 8b 55 c8                   mov     rdx, qword ptr [rbp - 0x38]
  21188e: 48 8d 7d d0                   lea     rdi, [rbp - 0x30]
  211892: e8 39 06 00 00                call    0x211ed0 <.text+0x7f0>
  211897: eb 00                         jmp     0x211899 <.text+0x1b9>
  211899: 48 8d 85 20 ff ff ff          lea     rax, [rbp - 0xe0]
  2118a0: 48 89 85 28 fe ff ff          mov     qword ptr [rbp - 0x1d8], rax
  2118a7: 48 05 a0 00 00 00             add     rax, 0xa0
  2118ad: 48 89 85 30 fe ff ff          mov     qword ptr [rbp - 0x1d0], rax
  2118b4: 48 8b bd 30 fe ff ff          mov     rdi, qword ptr [rbp - 0x1d0]
  2118bb: 48 83 c7 e0                   add     rdi, -0x20
  2118bf: 48 89 bd 20 fe ff ff          mov     qword ptr [rbp - 0x1e0], rdi
  2118c6: e8 e5 05 00 00                call    0x211eb0 <.text+0x7d0>
  2118cb: 48 8b 8d 28 fe ff ff          mov     rcx, qword ptr [rbp - 0x1d8]
  2118d2: 48 8b 85 20 fe ff ff          mov     rax, qword ptr [rbp - 0x1e0]
  2118d9: 48 39 c8                      cmp     rax, rcx
  2118dc: 48 89 85 30 fe ff ff          mov     qword ptr [rbp - 0x1d0], rax
  2118e3: 75 cf                         jne     0x2118b4 <.text+0x1d4>
  2118e5: 48 b8 6d e4 ba 29 e5 b5 d8 3f movabs  rax, 0x3fd8b5e529bae46d
  2118ef: 48 89 85 e8 fe ff ff          mov     qword ptr [rbp - 0x118], rax
  2118f6: 48 8d 7d d0                   lea     rdi, [rbp - 0x30]
  2118fa: 48 89 bd 10 fe ff ff          mov     qword ptr [rbp - 0x1f0], rdi
  211901: e8 4a 06 00 00                call    0x211f50 <.text+0x870>
  211906: 48 8b bd 10 fe ff ff          mov     rdi, qword ptr [rbp - 0x1f0]
  21190d: 48 89 85 d8 fe ff ff          mov     qword ptr [rbp - 0x128], rax
  211914: e8 67 06 00 00                call    0x211f80 <.text+0x8a0>
  211919: 48 89 85 d0 fe ff ff          mov     qword ptr [rbp - 0x130], rax
  211920: 48 8b bd d8 fe ff ff          mov     rdi, qword ptr [rbp - 0x128]
  211927: 48 8b b5 d0 fe ff ff          mov     rsi, qword ptr [rbp - 0x130]
  21192e: 0f 57 c0                      xorps   xmm0, xmm0
  211931: e8 4a 03 00 00                call    0x211c80 <.text+0x5a0>
  211936: f2 0f 11 85 18 fe ff ff       movsd   qword ptr [rbp - 0x1e8], xmm0
  21193e: eb 00                         jmp     0x211940 <.text+0x260>
  211940: f2 0f 10 85 18 fe ff ff       movsd   xmm0, qword ptr [rbp - 0x1e8]
  211948: f2 0f 11 85 e0 fe ff ff       movsd   qword ptr [rbp - 0x120], xmm0
  211950: f2 0f 10 85 e0 fe ff ff       movsd   xmm0, qword ptr [rbp - 0x120]
  211958: f2 0f 10 0d 00 07 ff ff       movsd   xmm1, qword ptr [rip - 0xf900] # 0x202060
  211960: f2 0f 59 c1                   mulsd   xmm0, xmm1
  211964: f2 0f 11 85 c0 fe ff ff       movsd   qword ptr [rbp - 0x140], xmm0
  21196c: 48 c7 85 b8 fe ff ff 18 00 00 00      mov     qword ptr [rbp - 0x148], 0x18
  211977: 48 c7 85 b0 fe ff ff 41 1a 20 00      mov     qword ptr [rbp - 0x150], 0x201a41
  211982: 48 8b bd b0 fe ff ff          mov     rdi, qword ptr [rbp - 0x150]
  211989: 48 8b b5 b8 fe ff ff          mov     rsi, qword ptr [rbp - 0x148]
  211990: ba b5 19 20 00                mov     edx, 0x2019b5
  211995: b9 58 1d 20 00                mov     ecx, 0x201d58
  21199a: 41 b8 69 1d 20 00             mov     r8d, 0x201d69
  2119a0: e8 0b 06 00 00                call    0x211fb0 <.text+0x8d0>
  2119a5: eb 00                         jmp     0x2119a7 <.text+0x2c7>
  2119a7: 48 c7 85 a8 fe ff ff 1b 00 00 00      mov     qword ptr [rbp - 0x158], 0x1b
  2119b2: 48 c7 85 a0 fe ff ff b9 19 20 00      mov     qword ptr [rbp - 0x160], 0x2019b9
  2119bd: 48 8b bd a0 fe ff ff          mov     rdi, qword ptr [rbp - 0x160]
  2119c4: 48 8b b5 a8 fe ff ff          mov     rsi, qword ptr [rbp - 0x158]
  2119cb: 41 b8 8c 1a 20 00             mov     r8d, 0x201a8c
  2119d1: 4c 89 c2                      mov     rdx, r8
  2119d4: 4c 89 c1                      mov     rcx, r8
  2119d7: e8 34 06 00 00                call    0x212010 <.text+0x930>
  2119dc: eb 00                         jmp     0x2119de <.text+0x2fe>
  2119de: 48 8d 45 d0                   lea     rax, [rbp - 0x30]
  2119e2: 48 89 85 98 fe ff ff          mov     qword ptr [rbp - 0x168], rax
  2119e9: 48 8b bd 98 fe ff ff          mov     rdi, qword ptr [rbp - 0x168]
  2119f0: e8 5b 05 00 00                call    0x211f50 <.text+0x870>
  2119f5: 48 89 85 90 fe ff ff          mov     qword ptr [rbp - 0x170], rax
  2119fc: 48 8b bd 98 fe ff ff          mov     rdi, qword ptr [rbp - 0x168]
  211a03: e8 78 05 00 00                call    0x211f80 <.text+0x8a0>
  211a08: 48 89 85 88 fe ff ff          mov     qword ptr [rbp - 0x178], rax
  211a0f: 48 8d bd 90 fe ff ff          lea     rdi, [rbp - 0x170]
  211a16: 48 8d b5 88 fe ff ff          lea     rsi, [rbp - 0x178]
  211a1d: e8 4e 06 00 00                call    0x212070 <.text+0x990>
  211a22: 88 85 0f fe ff ff             mov     byte ptr [rbp - 0x1f1], al
  211a28: eb 00                         jmp     0x211a2a <.text+0x34a>
  211a2a: 8a 85 0f fe ff ff             mov     al, byte ptr [rbp - 0x1f1]
  211a30: 34 ff                         xor     al, -0x1
  211a32: a8 01                         test    al, 0x1
  211a34: 75 05                         jne     0x211a3b <.text+0x35b>
  211a36: e9 a2 01 00 00                jmp     0x211bdd <.text+0x4fd>
  211a3b: 48 8d bd 90 fe ff ff          lea     rdi, [rbp - 0x170]
  211a42: e8 59 06 00 00                call    0x2120a0 <.text+0x9c0>
  211a47: 48 89 85 00 fe ff ff          mov     qword ptr [rbp - 0x200], rax
  211a4e: eb 00                         jmp     0x211a50 <.text+0x370>
  211a50: 48 8b 85 00 fe ff ff          mov     rax, qword ptr [rbp - 0x200]
  211a57: 48 89 85 80 fe ff ff          mov     qword ptr [rbp - 0x180], rax
  211a5e: 48 8b bd 80 fe ff ff          mov     rdi, qword ptr [rbp - 0x180]
  211a65: e8 66 06 00 00                call    0x2120d0 <.text+0x9f0>
  211a6a: 48 89 85 78 fe ff ff          mov     qword ptr [rbp - 0x188], rax
  211a71: 48 8b bd 80 fe ff ff          mov     rdi, qword ptr [rbp - 0x180]
  211a78: e8 73 06 00 00                call    0x2120f0 <.text+0xa10>
  211a7d: 48 89 85 70 fe ff ff          mov     qword ptr [rbp - 0x190], rax
  211a84: 48 8b 85 70 fe ff ff          mov     rax, qword ptr [rbp - 0x190]
  211a8b: f2 0f 10 00                   movsd   xmm0, qword ptr [rax]
  211a8f: f2 0f 10 0d c9 05 ff ff       movsd   xmm1, qword ptr [rip - 0xfa37] # 0x202060
  211a97: f2 0f 59 c1                   mulsd   xmm0, xmm1
  211a9b: f2 0f 11 85 68 fe ff ff       movsd   qword ptr [rbp - 0x198], xmm0
  211aa3: 48 c7 85 60 fe ff ff 1e 00 00 00      mov     qword ptr [rbp - 0x1a0], 0x1e
  211aae: 48 c7 85 58 fe ff ff 4c 1b 20 00      mov     qword ptr [rbp - 0x1a8], 0x201b4c
  211ab9: 48 8b 95 78 fe ff ff          mov     rdx, qword ptr [rbp - 0x188]
  211ac0: 48 8b 8d 70 fe ff ff          mov     rcx, qword ptr [rbp - 0x190]
  211ac7: 48 8b bd 58 fe ff ff          mov     rdi, qword ptr [rbp - 0x1a8]
  211ace: 48 8b b5 60 fe ff ff          mov     rsi, qword ptr [rbp - 0x1a0]
  211ad5: 4c 8d 85 68 fe ff ff          lea     r8, [rbp - 0x198]
  211adc: e8 2f 06 00 00                call    0x212110 <.text+0xa30>
  211ae1: eb 00                         jmp     0x211ae3 <.text+0x403>
  211ae3: eb 00                         jmp     0x211ae5 <.text+0x405>
  211ae5: 48 8d bd 90 fe ff ff          lea     rdi, [rbp - 0x170]
  211aec: e8 7f 06 00 00                call    0x212170 <.text+0xa90>
  211af1: eb 00                         jmp     0x211af3 <.text+0x413>
  211af3: e9 17 ff ff ff                jmp     0x211a0f <.text+0x32f>
  211af8: 48 89 c1                      mov     rcx, rax
  211afb: 89 d0                         mov     eax, edx
  211afd: 48 89 8d 08 ff ff ff          mov     qword ptr [rbp - 0xf8], rcx
  211b04: 89 85 04 ff ff ff             mov     dword ptr [rbp - 0xfc], eax
  211b0a: 48 8b 85 18 ff ff ff          mov     rax, qword ptr [rbp - 0xe8]
  211b11: 48 8d 8d 20 ff ff ff          lea     rcx, [rbp - 0xe0]
  211b18: 48 39 c1                      cmp     rcx, rax
  211b1b: 48 89 85 f8 fd ff ff          mov     qword ptr [rbp - 0x208], rax
  211b22: 74 31                         je      0x211b55 <.text+0x475>
  211b24: 48 8b bd f8 fd ff ff          mov     rdi, qword ptr [rbp - 0x208]
  211b2b: 48 83 c7 e0                   add     rdi, -0x20
  211b2f: 48 89 bd f0 fd ff ff          mov     qword ptr [rbp - 0x210], rdi
  211b36: e8 75 03 00 00                call    0x211eb0 <.text+0x7d0>
  211b3b: 48 8b 85 f0 fd ff ff          mov     rax, qword ptr [rbp - 0x210]
  211b42: 48 8d 8d 20 ff ff ff          lea     rcx, [rbp - 0xe0]
  211b49: 48 39 c8                      cmp     rax, rcx
  211b4c: 48 89 85 f8 fd ff ff          mov     qword ptr [rbp - 0x208], rax
  211b53: 75 cf                         jne     0x211b24 <.text+0x444>
  211b55: e9 14 01 00 00                jmp     0x211c6e <.text+0x58e>
  211b5a: 48 89 c1                      mov     rcx, rax
  211b5d: 89 d0                         mov     eax, edx
  211b5f: 48 89 8d 08 ff ff ff          mov     qword ptr [rbp - 0xf8], rcx
  211b66: 89 85 04 ff ff ff             mov     dword ptr [rbp - 0xfc], eax
  211b6c: 48 8d 85 20 ff ff ff          lea     rax, [rbp - 0xe0]
  211b73: 48 89 85 e0 fd ff ff          mov     qword ptr [rbp - 0x220], rax
  211b7a: 48 05 a0 00 00 00             add     rax, 0xa0
  211b80: 48 89 85 e8 fd ff ff          mov     qword ptr [rbp - 0x218], rax
  211b87: 48 8b bd e8 fd ff ff          mov     rdi, qword ptr [rbp - 0x218]
  211b8e: 48 83 c7 e0                   add     rdi, -0x20
  211b92: 48 89 bd d8 fd ff ff          mov     qword ptr [rbp - 0x228], rdi
  211b99: e8 12 03 00 00                call    0x211eb0 <.text+0x7d0>
  211b9e: 48 8b 8d e0 fd ff ff          mov     rcx, qword ptr [rbp - 0x220]
  211ba5: 48 8b 85 d8 fd ff ff          mov     rax, qword ptr [rbp - 0x228]
  211bac: 48 39 c8                      cmp     rax, rcx
  211baf: 48 89 85 e8 fd ff ff          mov     qword ptr [rbp - 0x218], rax
  211bb6: 75 cf                         jne     0x211b87 <.text+0x4a7>
  211bb8: e9 b1 00 00 00                jmp     0x211c6e <.text+0x58e>
  211bbd: 48 89 c1                      mov     rcx, rax
  211bc0: 89 d0                         mov     eax, edx
  211bc2: 48 89 8d 08 ff ff ff          mov     qword ptr [rbp - 0xf8], rcx
  211bc9: 89 85 04 ff ff ff             mov     dword ptr [rbp - 0xfc], eax
  211bcf: 48 8d 7d d0                   lea     rdi, [rbp - 0x30]
  211bd3: e8 28 06 00 00                call    0x212200 <.text+0xb20>
  211bd8: e9 91 00 00 00                jmp     0x211c6e <.text+0x58e>
  211bdd: 48 c7 85 50 fe ff ff 1b 00 00 00      mov     qword ptr [rbp - 0x1b0], 0x1b
  211be8: 48 c7 85 48 fe ff ff b9 19 20 00      mov     qword ptr [rbp - 0x1b8], 0x2019b9
  211bf3: 48 8b bd 48 fe ff ff          mov     rdi, qword ptr [rbp - 0x1b8]
  211bfa: 48 8b b5 50 fe ff ff          mov     rsi, qword ptr [rbp - 0x1b0]
  211c01: 41 b8 8c 1a 20 00             mov     r8d, 0x201a8c
  211c07: 4c 89 c2                      mov     rdx, r8
  211c0a: 4c 89 c1                      mov     rcx, r8
  211c0d: e8 fe 03 00 00                call    0x212010 <.text+0x930>
  211c12: eb 00                         jmp     0x211c14 <.text+0x534>
  211c14: 48 c7 85 40 fe ff ff 1e 00 00 00      mov     qword ptr [rbp - 0x1c0], 0x1e
  211c1f: 48 c7 85 38 fe ff ff 4c 1b 20 00      mov     qword ptr [rbp - 0x1c8], 0x201b4c
  211c2a: 48 8b bd 38 fe ff ff          mov     rdi, qword ptr [rbp - 0x1c8]
  211c31: 48 8b b5 40 fe ff ff          mov     rsi, qword ptr [rbp - 0x1c0]
  211c38: ba cc 1a 20 00                mov     edx, 0x201acc
  211c3d: 48 8d 8d e0 fe ff ff          lea     rcx, [rbp - 0x120]
  211c44: 4c 8d 85 c0 fe ff ff          lea     r8, [rbp - 0x140]
  211c4b: e8 50 05 00 00                call    0x2121a0 <.text+0xac0>
  211c50: eb 00                         jmp     0x211c52 <.text+0x572>
  211c52: c7 45 fc 00 00 00 00          mov     dword ptr [rbp - 0x4], 0x0
  211c59: 48 8d 7d d0                   lea     rdi, [rbp - 0x30]
  211c5d: e8 9e 05 00 00                call    0x212200 <.text+0xb20>
  211c62: 8b 45 fc                      mov     eax, dword ptr [rbp - 0x4]
  211c65: 48 81 c4 30 02 00 00          add     rsp, 0x230
  211c6c: 5d                            pop     rbp
  211c6d: c3                            ret
  211c6e: 48 8b bd 08 ff ff ff          mov     rdi, qword ptr [rbp - 0xf8]
  211c75: e8 d6 c5 01 00                call    0x22e250 <_Unwind_Resume@plt>
  211c7a: 66 0f 1f 44 00 00             nop     word ptr [rax + rax]
  211c80: 55                            push    rbp
  211c81: 48 89 e5                      mov     rbp, rsp
  211c84: 48 83 ec 30                   sub     rsp, 0x30
  211c88: 48 89 7d f8                   mov     qword ptr [rbp - 0x8], rdi
  211c8c: 48 89 75 f0                   mov     qword ptr [rbp - 0x10], rsi
  211c90: f2 0f 11 45 e0                movsd   qword ptr [rbp - 0x20], xmm0
  211c95: 48 8d 7d f8                   lea     rdi, [rbp - 0x8]
  211c99: 48 8d 75 f0                   lea     rsi, [rbp - 0x10]
  211c9d: e8 ce 03 00 00                call    0x212070 <.text+0x990>
  211ca2: 34 ff                         xor     al, -0x1
  211ca4: a8 01                         test    al, 0x1
  211ca6: 75 02                         jne     0x211caa <.text+0x5ca>
  211ca8: eb 34                         jmp     0x211cde <.text+0x5fe>
  211caa: f2 0f 10 45 e0                movsd   xmm0, qword ptr [rbp - 0x20]
  211caf: f2 0f 11 45 d8                movsd   qword ptr [rbp - 0x28], xmm0
  211cb4: 48 8d 7d f8                   lea     rdi, [rbp - 0x8]
  211cb8: e8 e3 03 00 00                call    0x2120a0 <.text+0x9c0>
  211cbd: f2 0f 10 45 d8                movsd   xmm0, qword ptr [rbp - 0x28]
  211cc2: 48 89 c6                      mov     rsi, rax
  211cc5: 48 8d 7d ef                   lea     rdi, [rbp - 0x11]
  211cc9: e8 22 00 00 00                call    0x211cf0 <.text+0x610>
  211cce: f2 0f 11 45 e0                movsd   qword ptr [rbp - 0x20], xmm0
  211cd3: 48 8d 7d f8                   lea     rdi, [rbp - 0x8]
  211cd7: e8 94 04 00 00                call    0x212170 <.text+0xa90>
  211cdc: eb b7                         jmp     0x211c95 <.text+0x5b5>
  211cde: f2 0f 10 45 e0                movsd   xmm0, qword ptr [rbp - 0x20]
  211ce3: 48 83 c4 30                   add     rsp, 0x30
  211ce7: 5d                            pop     rbp
  211ce8: c3                            ret

今後のCとC++

C23とC++23は共に2024年10月31日に正式公開されました(どちらも遅延)。
其の直後から次の規格(CではC2Y、C++ではC++2cまたはC++26)の作業が始まっています。

C++は2011年以降ほぼ3年周期(C++11→14→17→20→23)を維持していますが、Cは2011年以降6年周期(C11→C17→C23)で、
C17はほぼバグフィックスだったのでかなりゆっくりしたペースを続けているように見えます。

今後について

此のブログは元々プログラミング言語を深く扱う事を目的とした物ではありませんでしたが、此の1年でC、C++、アセンブリ、Vulkanを何度も取り上げた結果、いつの間にか「C・C++・アセンブリ・Vulkan特化サイト」の様な雰囲気になってしまいました。
其れは其れで喜んで受け入れます。今後はGLSLも取り扱う予定です(特にVulkan向けのGLSLを中心に)。

GLSLはOpenGL用、GLES用、WebGL用、Vulkan用で微妙に仕様が異なる為扱いが少し難しいですが、現在ゲーム業界が向かっている方向性であるVulkan向けGLSLを中心に解説していくつもりです。

システムプログラミング全般を網羅する事も可能ですが、Zigは殆ど触った事がなく、Rustに至っては一度も実務で使った事がない為、あんま知識のない言語を深く取り上げるのは適切ではないと考えています。一方でGoやPHPは過去にかなり深く使ってきました(此のブログ自体もPHPで書かれていますし、Go製のプロダクトもいくつかリリースした経験があります)が、其れらは何方(どちら)かというとウェブ開発寄りの言語であり、あたしはウェブ開発の分野で18年間働いた後、もう完全に疲れているので取り上げる予定はありません。

C++26や(未だ確定していませんが)恐らくC26がリリースされた際には、勿論其方についても取り上げていくつもりです。

以上