• ベストアンサー

void func( void )について

void func( void )について 右側のvoidは引数がないという事は分かったのですが左側の voidの意味は「値を返さないreturn型に用いる」とあったのですが 値を返さないreturnは使う意味はあるのでしょうか? またどういった時に使うのでしょうか?? あと return 0 と return の違いは何なのでしょうか?? ご教授よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • qcelp
  • ベストアンサー率38% (20/52)
回答No.5

#2,4です。 C言語には必ず最初に起動されるmainという名前の特別な関数が必要です。 前回書いた関数は関数名がfuncのため、「最初に起動される関数がないよー」とのことでコンパイルエラーがでます。 というわけで、以下のように変えていただければ良いと思います。(全角スペース入れてないです) #include <stdio.h> void func(int n){ int i = 1; int sum = 0; if( n <= 0 ) { printf( "1以上の値を指定してください\n" ); return; } while( i <= n ) { sum += i; i++; } printf( "結果は%dです\n", sum ); } int main(){ func(); return 0; } main関数はint型の値を返すのが好ましいとされているので何らかの値を返そうということで0(エラーがないという意味かな)を返すのがほとんどです。慣例と思っていただいても良いと思います。 もちろん、他の関数は値を返す必要がなければ、 void func(void)のように定義してやればいいです。

kogara
質問者

お礼

色々とご親切にお答え頂き有難うござます!^^ またエラーが出ましたが func' : 関数が不正な 0 個の実引数をともなって呼び出されました。 ここは void func() や void func(void) にしたのですがこれではコンパイルは出来ても出力画面に何も表示されないです^^; ただ、結果的には何を表しているのかが理解しました return の意味もそこまでこだわらないでおこうとおもいます^^; どうも有難うございます!

その他の回答 (5)

  • qcelp
  • ベストアンサー率38% (20/52)
回答No.6

#5です。 func関数に引数を入れるのを忘れました。 コピペの際には気をつけてください。

  • qcelp
  • ベストアンサー率38% (20/52)
回答No.4

#2です。 インデントがわかりにくいため、#3さんの仰るとおり全角スペースにしました。置き換えてください

kogara
質問者

お礼

以下のように自分で打ち直しました。 #include <stdio.h> void func(int n){ int i = 1; int sum = 0; if( n <= 0 ) { printf( "1以上の値を指定してください\n" ); return; } while( i <= n ) { sum += i; i++; } printf( "結果は%dです\n", sum ); } それでも以下のようなエラーが表示 されます、何度も申し訳ございません^^; error LNK2001: 外部シンボル "_main" は未解決です error LNK1120: 外部参照 1 が未解決です。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

> riturn 0 は宣言程度のもの >だと思っていてまだ return だけのプログラムの >違いが今ひとつ分かりません^^; では逆に質問。 kogaraさんは、戻り値を返す必要がない関数で、 void func() みたいにしませんか? そのような処理で、関数の途中で処理を終了させるときは、必然的にreturn;で抜けることになります。 >error C2018: 文字 'xxxx' は認識できません。 そのまま貼り付けましたね。 全角空白がソース中に含まれています。 消すか、半角のスペースに置き換えてください。 例は、#2の方ので問題ないと思います。

kogara
質問者

お礼

>>そのような処理で、関数の途中で処理を終了させるときは、必然的にreturn;で抜けることになります。 なるほど引数がなければreturnのあとにつける引数 もないということで、 return 0 の場合は >>戻り値として0を返して呼び出し元に戻る ということですね。 ただ0を返して戻らす意味がいまいちよく分かりません 0を返すのは何故なのでしょうか??

  • qcelp
  • ベストアンサー率38% (20/52)
回答No.2

良い関数とはとても言えないですが、例を書きます。 void func( int n ) {  int i = 1;  int sum = 0;  if( n <= 0 )  {   printf( "1以上の値を指定してください\n" );   return;  }  while( i <= n )  {   sum += i;   i++;  }  printf( "結果は%dです\n", sum ); } この関数は1~nまでの和を求め、出力します。 ただし、指定されたnが0以下の場合は"1以上の値を指定してください"を出力して後、return文が実行されるのでwhile以降は実行されず、終了します。 処理結果 n=0の場合 1以上の値を指定してください n=5の場合 結果は15です つまり、値を返さない関数で例外的な処理などで関数の途中で終了させたい場合に使います。

kogara
質問者

お礼

ご教授有難うございます!! 上のプログラムなのですが、 visual c++でコンパイラしたところ何故か私の パソコンでは エラー 34、警告 0 がでて実行が 出来ませんでした^^; 全て error C2018: 文字 'xxxx' は認識できません。 でした。 #include <stdio.h>は付けたのですが何故でし ょうか??

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>値を返さないreturnは使う意味はあるのでしょうか? >またどういった時に使うのでしょうか?? 関数の途中で呼び出し元に戻るとき >あと return 0 と return の違いは何なのでしょうか?? 戻り値として0を返して呼び出し元に戻る と、 呼び出し元に戻る

kogara
質問者

補足

ご解答有難うございます! retun だけを使う簡単なプログラムの 例文などあればなんと分かるかも知れな いのですが.. 私がみるプログラムはいつも retun 0 を使ってい るやつばかりで riturn 0 は宣言程度のもの だと思っていてまだ return だけのプログラムの 違いが今ひとつ分かりません^^;

関連するQ&A