- blogs:
- cles::blog
2010/06/27

C と C++ と void*


先日、 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 を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(113868)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112472)
3 . 年次の人間ドックへ(111942)
4 . 2023 年分の確定申告完了!(1つめ)(111516)
5 . 三菱鉛筆がラミーを買収(111395)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112472)
3 . 年次の人間ドックへ(111942)
4 . 2023 年分の確定申告完了!(1つめ)(111516)
5 . 三菱鉛筆がラミーを買収(111395)
cles::blogについて
Referrers