C では、 へのポインタのキャストと からのポインタのキャストはエラーではありませんvoid *
。
C++ への移植における大きな障害は、 などの汎用ポインターを扱う関数malloc
や、 などの独自のコードで宣言された関数から戻るときに、ポインターをキャストする必要があることvoid *block_get(Blkno const blkno);
です。
ただし、私のコードは、CおよびC++ コンパイラによって正常にコンパイルされることを意図しています。C++ のためにどこでも明示的なキャストを提供する場合、それらは C スタイルのキャストである必要があり、両方の言語のポインター型との間で非ポインター型をキャストするため、バグをマスクしている可能性があります。
私の参照エラーは次のとおりです。
struct Cpfs *cpfs = calloc(1, sizeof(*cpfs));
MSVCで生成されるもの:
エラー 2 エラー C2440: 'initializing' : 'void *' から 'Cpfs *' に変換できません e:\src\cpfs\cpfs.c 179
明らかに私は使用できないnew
かstatic_cast
、C を使用しなくなった場合に自然に使用するものです。最小限の冗長性で各言語を囲む最大の型安全性を提供する最良の方法は何ですか?void *