アスタリスクはもう古い!?モダンC言語でのポインター型の記法
ARANK
この記事は「C Advent Calendar 2025」の11日目の記事です。この記事は半分ジョークで半分本気です。C言語のポインター型の表記の問題C言語でのポインター型の表記にはアスタリスク * が使われます。例えば、int へのポインターなら int * という具合です。しかし、C言語のポインター型の記法には2つの問題点があります:問題点その1:複数の変数を宣言したときに非直感的な結果になる。アスタリスクは型ではなく変数につくので、複数の変数を宣言した時に非直感的な結果になります。次のコードを実行してみましょう:#include <stdio.h> #define reveal_type(x) \ printf("%s: %s\n", #x, _Generic((x), int: "int", int *: "int *", int **: "int **")) int main() { int * a, b, c; reveal_type(a); reveal_type(b); reveal_type(c); } $ clang -std=c23 ptr1.c $ ./a.out a: int * b: int c: int ポインター型になったのは a だけで、b と c は普通の int 型になりました。問題点その2:関数ポインター型や配列へのポインター型が難解になる。これはポインター型の問題ではありませんが、C言語の関数型も難解な記法なので、組み合わせである関数ポイ…