トップページ > 記事閲覧
関数のvoid,int型について
名前:たりお 日時: 2016/09/04 22:42

質問です。 セーブをする関数を作ろうと思い、以下のコードを書きました。 void Save(); typedef struct{ int Scene1; int Scene2; int Scene3; int Scene4; }SaveData_t; void Save(void){ SaveData_t Data = { 200, 100, 1000, 1000 }; FILE *fp = fopen( "セーブデータ.dat", "wb" ); if( fp == NULL ){//エラーが起きたらNULLを返す return 0; } fwrite( &Data, sizeof(Data), 1, fp ); fclose( fp );//ファイルを閉じる } しかしエラーが出ました。その内容は、 「'Save' : 関数は 'void' 型として宣言されていますが、値を返しました。」 というものでした。 質問1:なぜ return 0; などと書いてはいないのにSave()関数は値を返したのでしょうか。 この後、Save()の部分を int Save(); int Save(void){ 省略 } とすれば問題なく動いたのですが、試しに int Save(); int Save(void){ 省略      return 0; } と書いても問題なく動きました。 質問2: return 0;を書いた場合と書かなかった場合どちらも問題なく動いたのはなぜでしょうか。
メンテ

Page: 1 |

Re: 関数のvoid,int型について ( No.1 )
名前:ななし 日時:2016/09/05 12:17

if( fp == NULL ){//エラーが起きたらNULLを返す return 0; } これのせいだと思います 戻り値をvoidにしたときはreturnの後に何も書かず「return;」とすれば望みどおりの動きになるはずです。
メンテ
Re: 関数のvoid,int型について ( No.2 )
名前:たりお 日時:2016/09/05 15:24

そこでしたか。。。納得しました。 返答ありがとうこざました。
メンテ
Re: 関数のvoid,int型について ( No.3 )
名前:ななし 日時:2016/09/05 17:03

すみません、質問2の方に答えてませんでしたね C++では戻り値がint型の時、何もreturnせずに関数から抜けた場合は0を返すように定義されているようです。
メンテ
Re: 関数のvoid,int型について ( No.4 )
名前:たりお 日時:2016/09/05 18:10

自分も質問2を忘れていました・・・w なるほど、そういうことですか! 丁寧にご返答していただきありがとうございます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存