2012-04-14 7 views
0
void* buffer = (void*)malloc(100); 

malloc()関数の前に(void *)を付けると、何が達成されているのですか?戻り値の型をオーバーライドしていますか?mallocの前に(void *)があるのはなぜですか?

+8

これは、 'malloc'が' void * '型のポインタを返すことを知らないことを意味します。 –

+1

接頭辞btwではなく*キャスト*です。 –

答えて

4

mallocへの呼び出しの戻り値の型が明示的にvoidポインタにキャストされている:これは同等です。これは冗長で、既にを返していますが、 (おそらく )が開発者の意図を明確にするために存在する可能性があります。

+2

"開発者の意図を明確にするためにおそらく存在しています"もしそうなら、それは著者側の大きな謎です。キャストは型システムを放棄する効果があります。正気のプログラマーは、決してキャストを使用することができないほど頑張ります。偽りの不要なキャストを追加することは、信念を超えてひどいです。 –

+0

@DavidHeffernan真実、良い点。私はいつも疑念の恩恵を得ようとしますが、それでも私の反応を編集しました。 –

6

mallocが既に無効なポインタを返すので、何も達成されません。

void* buffer = malloc(100); 
+0

迅速な対応に感謝します。しかし、そのプレフィックスはどうしますか? – jwbensley

+1

それは何もしません、あなたはそれを削除することができ、コードは同等です。 –

+0

今すぐ入手しました、歓声:D – jwbensley

4

この場合、何もしません。しかし、C++を使用すると、一般的にmallocのリターンをキャストする必要があり、型の安全性に関するCよりもはるかに厳しいですので、:

void* x = malloc(100);  //OK in C/C++ 
int* y = malloc(100);  //OK in C, error in C++ 
int* z = (int*)malloc(100); //OK in C/C++, not recommended for C 

しかし、あなたがC++を使用するので、私はあなたがnewを使用する必要があることを教えてくれないことはできません代わりに。

+0

ブレークダウンありがとう:D – jwbensley

関連する問題