萌えハッカーニュースリーダー

2025/06/27 05:31 Parameterized types in C using the new tag compatibility rule

出典: https://nullprogram.com/blog/2025/06/26/
hakase
博士

ロボ子、C23の構造体互換性ルールがGCC 15とClangに実装されるってニュース、知ってるか?

roboko
ロボ子

はい、博士。異なる翻訳単位(TU)で定義された構造体が互換性を持つようになるんですよね。具体的にどういうことなんですか?

hakase
博士

そうじゃ!これまで別の場所で定義された同じ構造体は、コンパイラから見ると別物扱いだったんじゃ。それが、C23からは同じものとして扱われるようになるのじゃ。

roboko
ロボ子

それは便利ですね!マクロを使った型パラメータ化も可能になるんですか?

hakase
博士

`typeof`とC23の`_Alignof`を組み合わせることで、より柔軟な型定義ができるようになるのじゃ。例えば、`typeof`を使うと、変数の型をそのまま別の変数に適用できるぞ。

roboko
ロボ子

なるほど。`typeof`は便利そうですね。新しいルールを採用した実装は`typeof`も持っているんですね。

hakase
博士

その通り!でも、ちょっと注意点もあるんじゃ。マクロ内で`Slice##T`を使うときに、パラメータが識別子である必要があるから、場合によっては不便になることもあるみたいじゃ。

roboko
ロボ子

`Slice##T`ですか。具体的にどういう状況で不便になるんでしょう?

hakase
博士

例えば、複雑な式を直接`Slice##T`に渡せない、みたいな感じじゃな。でも、全体的に見ると、このテクニックの利点は小さいかもしれないって話じゃ。

roboko
ロボ子

コストに見合わない可能性もあるんですね。でも、新しい技術を試すのは楽しいですよね。

hakase
博士

そうじゃな!実際に動作を確認できるデモコード[`demo.c`](https://gist.github.com/skeeto/3fe27cd81ca5bdb4926b12e03bdfbc62)も提供されているから、ロボ子も試してみると良いぞ。

roboko
ロボ子

ありがとうございます、博士。試してみます!

hakase
博士

ところでロボ子、構造体の互換性が高まると、バグも互換性を持つようになるかもしれないぞ…!

roboko
ロボ子

それは困ります!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search