プログラムをコンパイルした際に
エラーと警告がありますよね?
そこで、警告というので
「関数に戻り値の方が指定されていません。」
というのが出現して、
「void型とみなします。」
というのが出てきて、
一応作業は進められます。
でも本当にそれでいいのか心配です。
大丈夫でしょうか?
それをそうやって修正したらよいでしょうか?

手持ちのテキストには
エラーのときの対処法などが書いてないので
何かよいHPか本とかないでしょうか?
あったら教えてください。
お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

他の方の説明で充分なので、補足程度に。



int Func();
関数が上の場合と仮定して、その関数の記述の中に、
int Func(){
int a;
何らかの処理
return a;
}
その戻り値の型の変数を宣言し、その関数の最後らへんに
return a;
とすると値を返すので、エラーはなくなると思います。
ちなみにメインの関数の中で、
 (int型の変数)= Func();
とするとその変数にaの値を入れることが出来ます。
もうひとつ付け足すとif文の中で
if( Func() >= 3)
などとして、関数の実行とその得られた値の比較を同時に出来ます。
これは行数も節約できるので、結構使えます。
    • good
    • 0

関数から戻ったあと戻り値を使わないのなら、警告は無視してかまいません。


もし使うのなら、しかるべき型を指定して下さい。指定の仕方は他の方が書かれています。
    • good
    • 0

C言語学習塾


http://www.orchid.co.jp/computer/cschool/cschool …

C言語ばばな塾
http://www.bekkoame.ne.jp/~medaka/r_c/c_class.html

アルゴリズム入門
http://www.geocities.co.jp/SiliconValley-Oakland …

C/C++リンク集
http://www.cs.kyoto-su.ac.jp/~minaken/Link/Gengo …

WinAPIプログラミング(後で必要になると思います)
http://www.os.xaxon.ne.jp/~bunyan/program/sdk/pr …

晃くんのプログラミング入門
http://www.owari.ne.jp/~gguy/

講座を中心に紹介しました。
    • good
    • 0

 こんにちは、honiyonです。



 読んで字の如くです。 戻り値の型を指定していますか?
 戻り値の型が分からないので、とりあえず void型を戻り値とするよ、という意味です。
 その警告を消すには、明示的に戻り値の型を指定してください。

 詳しくは、関数の宣言の仕方を調べれば載っています。

 参考URLに、Visual C++のメーリングリストのURLを載せておきます。
 ここで記事を検索すれば、大体の事は分かるでしょう。
 他にも Visual C++を話題とするMLはたくさんあると思います。

 参考になれば幸いです(..

参考URL:http://www.freeml.com/ml_mess.php?ml=vcpp_progra …
    • good
    • 0

関数にも引数・戻り値の「型」をしてする必要があります。


つまりは、

int hogehoge(int a, int b)
{
 ・・・・
}
のような記述になります。

また、戻り値が無ければ、「void」型となりますので、
void hogehoge(int a, int b)
のように定義する必要があります。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qint main()、void main()、void main(void)、int main(void)

今日、大学でC言語の講義の時間、先生が、

#include <stdio.h>

void main(void){

}

と宣言してプログラムを書くと教えていました。
main関数には、
main()
void main()
void main( void )
int main()
int main( void )

と、人によりいくつかの描き方があったりします。
どれが本当は正しいのでしょうか?
void mainはすべきではないとなんかの本で読んだのですが・・。

Aベストアンサー

通称C89という以前の言語規格(現行コンパイラの多くが準拠)では、下記のいずれかが正しい。
int main(int argc, char *argv[])
int main(void)

但し、最新のC言語規格(通称C99)では、
<ISO/IEC9899:1999>
or in some other implementation-defined manner.
</ISO/IEC9899:1999>
となっているので、処理系が戻り値のvoidを認めていればvoidも可。
# 組込み系などで戻り値を使わない環境もあるためでしょうか。

なので、コンパイラのマニュアルで戻り値のvoidにしていい/しろと書いてない限り、
voidは言語仕様的には正しくない。(でも動くものもある)

Qvoid main(void){...}だとDosWindowが開くので

わざわざWindowsアプリにして以下のようにするしかないのでしょうか?

LONG WINAPI WinProcedure(HWND hW,UINT wM,UINT wP,LONG lP)
{
//ここに宣言を置く
switch(wM)
{
case WM_CREATE:
//ここに処理を置く
return 0;
default:
return(DefWindowProc(hW,wM,wP,lP));
}
}
WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int nCS)
{
WNDCLASSwc;
HWNDhW,hPW;
MSGms;

wc.lpszClassName="goo";
wc.lpfnWndProc=(WNDPROC)WinProcedure;
wc.hInstance=hI;
wc.style=CS_HREDRAW|CS_VREDRAW;
wc.cbClsExtra=NULL;
wc.cbWndExtra=NULL;
wc.hIcon=LoadIcon(NULL,IDI_EXCLAMATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName=NULL;
RegisterClass(&wc);
hW=CreateWindow
(
"goo",
"教えて!goo",
WS_OVERLAPPED,
0,
0,
640,
456,
NULL,
NULL,
hI,
NULL
);
ShowWindow(hW,nCS);
UpdateWindow(hW);
while(GetMessage(&ms,NULL,NULL,NULL))
{
TranslateMessage(&ms);
DispatchMessage(&ms);
}
return (ms.wParam);
}

もっと簡単にDosWindowが開かないようにする方法はないのでしょうか?
もしないとすると上記記述でもっと簡単にできないでしょうか?

わざわざWindowsアプリにして以下のようにするしかないのでしょうか?

LONG WINAPI WinProcedure(HWND hW,UINT wM,UINT wP,LONG lP)
{
//ここに宣言を置く
switch(wM)
{
case WM_CREATE:
//ここに処理を置く
return 0;
default:
return(DefWindowProc(hW,wM,wP,lP));
}
}
WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int nCS)
{
WNDCLASSwc;
HWNDhW,hPW;
MSGms;

wc.lpszClassName="goo";
wc.lpfnWndProc=(WNDPROC)WinProcedure;
wc.hInstance=hI;
wc.style=CS_HREDRAW|CS_VREDRAW;
wc...続きを読む

Aベストアンサー

ウィンドウを開く必要がないなら、mainをWinMainに変更するだけで良いのでは? ウィンドウクラス登録、ウィンドウ作成、メッセージループ、ウィンドウプロシージャは全て不要な気がしますが。

WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int nCS)
{
  //処理内容

  return 0;
}

Q戻り値を返す関数の前に(void)を付ける

今日会社で

変数 = (void)戻り値のある関数
#具体的な例としては下記一例を参照

と、ソースで書かれているものがあったのですが、
コメント等では、

「戻り値を明示しないときに(void)を付けて使用する」

と、書いてあります。
戻り値のある関数の前で(void)を付けると、戻り値が明示されなくなるのでしょうか??
または、このような動作にはならないのでしょうか。

自分自身、ソースの内容をうる覚えになっておりますので、
確認をしながらアップしていきたいと思いますので、
宜しくお願い致します。

/*一例*/

・num1とnum2を足した値を返す
int PlusPoint(int num1 , num2);

・PlusPointの値を格納する
int Sum

◇ソース◆

#include <stdio.h>
#include "Plus.h"
int main(void)
{
int Sum;

Sum = (void)PlusPoint;
if(Sum == 2)
{
printf("false");
exit(0);
}
printf("true");
return 0;
}
*PlusPoint関数は外部で定義されている
*プロトタイプ宣言はPlus.hに定義されいるものとする

今日会社で

変数 = (void)戻り値のある関数
#具体的な例としては下記一例を参照

と、ソースで書かれているものがあったのですが、
コメント等では、

「戻り値を明示しないときに(void)を付けて使用する」

と、書いてあります。
戻り値のある関数の前で(void)を付けると、戻り値が明示されなくなるのでしょうか??
または、このような動作にはならないのでしょうか。

自分自身、ソースの内容をうる覚えになっておりますので、
確認をしながらアップしていきたいと思いますので、
宜しくお願...続きを読む

Aベストアンサー

「戻り値を明示しないときに(void)を付けて使用する」

昨今では、あまり流行のスタイルではないと思いますが、
こういうコーディング規約の文化は、実際にありました。
lint(ソースのチェックツール)等で、(void)にキャストしていないと警告をあげるものもありました。
「冗長な記述」と見る向きも、「表明的な記述」と見る向きもあります。

> 戻り値のある関数の前で(void)を付けると、戻り値が明示されなくなるのでしょうか??

動作的には、戻り値を(void)にキャストしてるのですね。
だから「明示的に『使わない』という表明」してるという意図です。
# 何も書いてないと、ミスで戻り値をチェックしてないのか、
# 分かった上でチェックの必要がないのか分かりにくい、と考えます。

Sum = (void)PlusPoint;
とはいえ、こういう書き方はしない(できない)です。
コンパイル通らないでしょう?

あくまで、例えばこんな感じで使います。
(void)PlusPoint(1, 2);

Qvoid func( void )について

void func( void )について

右側のvoidは引数がないという事は分かったのですが左側の
voidの意味は「値を返さないreturn型に用いる」とあったのですが
値を返さないreturnは使う意味はあるのでしょうか?
またどういった時に使うのでしょうか??

あと return 0 と return の違いは何なのでしょうか??

ご教授よろしくお願いいたします。

Aベストアンサー

#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)のように定義してやればいいです。

#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++; ...続きを読む

Qvoid main (void)について、、、

またまたすみません。
プログラムを書くときに、

  void main (void)  

と、とりあえず最初にこれを書く、と覚えていて意味がわかりません。
小学生でも理解できるくらいに噛み砕いて説明をお願いします。

Aベストアンサー

まず初めに、過去ログの探し方についてです。
http://oshiete.goo.ne.jp/ask/howto/search.html

実際に、このカテゴリーから「void main 戻り値 引数」で検索をすれば、今だと56件ほど返ってきます。その中でお勧めなのが、以下の3件でしょうか。(各レベルについては、私の独断と偏見によるものです。)

小学生レベル→
http://oshiete1.goo.ne.jp/kotaeru.php3?q=100506

初学者レベル→
http://oshiete1.goo.ne.jp/kotaeru.php3?q=487521

技術者レベル→
http://oshiete1.goo.ne.jp/kotaeru.php3?q=328994


あと、「小学生でも理解できるくらいに噛み砕いて…」についてですが、強いてあげれば以下のようにもなるかと。
例えば、「関数」という抽象的概念の具体例としてよくあげられるものに、「自動販売機」があります。もちろん、この中にも単にお金を入れておく容器や缶ジュースなどとは別に、お釣りがいくらなのかとか、缶ジュースの残りがいくつなのかをチェックするようなソフトウェアが入っているはずです。(最新のものだと、100円玉の裏表の模様まで、チェックするものがあるらしいですね。)
そのようなプログラムの動作の概略を、main関数を用いて簡単に表せば、以下のようになると思います。(あくまで、噛み砕いて説明しているからであって、厳密には全然違いますよ。というより、正確にはメーカーの人じゃないと分からないでしょう。)

缶ジュース main (120円)
500ml入りペットボトル main (150円)

もちろん、これをドラクエ風に書けば、以下のようにもなるかと。

HPがフルに回復 main (ベホマ)
メタルキングの剣 main (37000G)

余談ですが、パルプンテなども、内部ではおそらく乱数なんかを発生させているんでしょうね~。ゲームプログラミングの方は一度もしたことがないので、あくまで想像ですけど。

まず初めに、過去ログの探し方についてです。
http://oshiete.goo.ne.jp/ask/howto/search.html

実際に、このカテゴリーから「void main 戻り値 引数」で検索をすれば、今だと56件ほど返ってきます。その中でお勧めなのが、以下の3件でしょうか。(各レベルについては、私の独断と偏見によるものです。)

小学生レベル→
http://oshiete1.goo.ne.jp/kotaeru.php3?q=100506

初学者レベル→
http://oshiete1.goo.ne.jp/kotaeru.php3?q=487521

技術者レベル→
http://oshiete1.goo.ne.jp/kotaeru.php3?...続きを読む


人気Q&Aランキング

おすすめ情報