BLOGTIMES
2010/06/27

C と C++ と void*

  c  cpp 
このエントリーをはてなブックマークに追加

先日、 malloc() の返り値は void* なので、ずっと明示的にキャストしないといけないと思ってた(というか、そう教わったからそういうものだと思ってた)けど、実はそうではないらしい*1ということが分かったので忘れないうちにメモ。

test.c

#include <stdlib.h> int main(){ int* i = malloc(sizeof(int)); return 0; }

実際に上記のようなプログラムを書いてコンパイルしてみると、Cのときは特にエラーも出なくて、C++にするとコンパイラが怒るのがわかります。

$ gcc test.c $ g++ test.c test.c: In function 'int main()': test.c:3: error: invalid conversion from 'void*' to 'int*'

クセとしてはいつでもキャストするように覚えておいたほうが都合いいから、教える方がそうしていたということなんでしょうか。ただ、 C でも void* を間接参照して値を格納しようとするとエラーになるので、型チェックの仕様はちょっと謎。もともと方言が多い処理系だからあまり深くつっこんじゃいけない部分なのかもしれませんが。


トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3625
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン