typedef const struct __CFString * a1;
上記の typedef 宣言では、a1 が定数構造体 __CFString へのポインターとして定義されていると述べています。
ここで、「__」とはどういう意味ですか?
次に、以下で説明する a2 として新しい定義を作成します。
typedef const struct CFString * a2;
では、a1 は a2 とどう違うのでしょうか?
typedef const struct __CFString * a1;
上記の typedef 宣言では、a1 が定数構造体 __CFString へのポインターとして定義されていると述べています。
ここで、「__」とはどういう意味ですか?
次に、以下で説明する a2 として新しい定義を作成します。
typedef const struct CFString * a2;
では、a1 は a2 とどう違うのでしょうか?
まず、 のアンダースコア__CFStringは名前の一部であるためstruct __CFString、 とstruct CFStringは異なる型であり、struct XXCFStringとstruct CFStringは異なる型です。
次に、2 つのアンダースコアで始まる名前は、実装用に予約されています。つまり、名前の衝突の危険を冒さずに 2 つのアンダースコアで始まる名前を使用することはできません。
詳細を含む別のSO回答は次のとおりです。C++識別子でアンダースコアを使用するためのルールは何ですか?