私の全体的なコメントと、Cで作業するための一般的な経験則...ポインタキャストを行う必要がある場合は、自分自身に質問してください。あなたが正直にポインタキャストを行う必要がある時代は非常にまれです。はるかに一般的なのは、理解に若干のギャップがあり、やっていることややっているべきことがはっきりしていないし、コンパイラの警告を黙らせようとしているために、ポインタキャストを使うときです。
ptr = (UINT32)malloc(1000);
非常に悪い!この "ポインタ"を使って何かすると、64ビットのplaformで動作すると非常に幸運です。ポインタをポインタ型のままにします。絶対に整数に格納する必要がある場合は、十分に大きいことが保証されているuintptr_t
を使用してください。
私はあなたがやろうとしてきたかもしれないと言うだろう:
// Allocate 1,000 32-bit integers
UINT32 *ptr = (UINT32*)malloc(1000 * sizeof(UINT32));
しかしそれさえもがCコード、奇妙なCおよびC++のハイブリッドの貧フォームです。 C++とは異なり、Cであなただけのvoid *
を取ることができますし、暗黙的に任意のポインタ型にそれを持って来る:void*
にキャスト
// Allocate 1,000 32-bit integers
UINT32 *ptr = malloc(1000 * sizeof(UINT32));
最後に、
free((void*)ptr);
することは頻繁に署名すること、別の大きな赤い旗であり、彼らは何をしているのか分からない。
free(ptr);
'の#define FINISH()後藤FINI;'オハイオ州の主は慈悲 – orlp
がgoto' '使用しないでください持っている:あなたは、実際のポインタ型であることを
ptr
を変更すると、ちょうどこれを行います。マクロ内に 'goto'を隠さないでください。 –このコードはコンパイルされますか?私はそうは思わない。 –