WinMainに値を返さない?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Qloeh
記事: 35
登録日時: 5年前

WinMainに値を返さない?

#1

投稿記事 by Qloeh » 5年前

度々すみません。今度はいきなりC4715’WinMain’値を返さないコントロールパスがありますというメッセージが出て、プロジェクトが終わってしまいます。
コードは以下の通りです。

コード:

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
	fileload();
	while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && GetHitKeyStateAll(key) == 0){
		draw_map();
		DrawGraph(s_pos_x * 32, s_pos_y * 32, chara_chip[0][s_vector], TRUE);
		if (key[KEY_INPUT_RETURN] == 1){
			while (CheckHitKey(KEY_INPUT_RETURN) == 1);
		}
		else{
			if (key[KEY_INPUT_UP] == 1){
				if (s_pos_y > 0){
					s_pos_y -= 1;
					vector_up();
				}
				else{
					vector_up();
					map_check();
				}
			}
			if (key[KEY_INPUT_DOWN] == 1){
				if (s_pos_y < 14){
					s_pos_y += 1;
					vector_down();
				}
				else{
					vector_down();
					map_check();
				}
			}
			if (key[KEY_INPUT_RIGHT] == 1){
				if (s_pos_x < 19){
					s_pos_x += 1;
					vector_right();
				}
				else{
					vector_right();
					map_check();
				}
			}
			if (key[KEY_INPUT_LEFT] == 1){
				if (s_pos_x > 0){
					s_pos_x -= 1;
					vector_left();
				}
				else{
					vector_left();
					map_check();
				}
			}
			WaitTimer(40);
		}
			DxLib_End();
			return 0;
		}
	}
メッセージは以下の通りです。
>c:\users\lactis\documents\visual studio 2013\projects\dxsample\main.cpp(63): warning C4715: 'WinMain' : 値を返さないコントロール パスがあります。
1> Dxsample.vcxproj -> C:\Users\lactis\Documents\Visual Studio 2013\Projects\Dxsample\Debug\Dxsample.exe
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
63行目に問題があるのだと推測されますが、他の人の例にあった、return 0というのは書いてあるんですよね……。
ここの関数の中身が覗きたいという場合は仰って下さい。宜しければお願いします

アバター
みけCAT
記事: 6311
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: WinMainに値を返さない?

#2

投稿記事 by みけCAT » 5年前

Qloeh さんが書きました:度々すみません。今度はいきなりC4715’WinMain’値を返さないコントロールパスがありますというメッセージが出て、プロジェクトが終わってしまいます。
プロジェクトが終わるというのはよくわからないですが、エラーメッセージの通りの問題でしょう。
while文の条件が最初に評価されるときに偽であったばあい、return文が実行されません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Qloeh
記事: 35
登録日時: 5年前

Re: WinMainに値を返さない?

#3

投稿記事 by Qloeh » 5年前

説明不測ですみません。プロジェクトが終わるというのはビルドすると応答しなくなるか、ウィンドウが一瞬出てすぐに消えるという意味です。
while文の条件にどこかの時点で反してしまったという事でしょうが、唐突だったので戸惑ってしまいました。少しやり直してきます

アバター
みけCAT
記事: 6311
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: WinMainに値を返さない?

#4

投稿記事 by みけCAT » 5年前

Qloeh さんが書きました:ビルドすると応答しなくなるか、
例のやつですね…わかりません。
Qloeh さんが書きました:ウィンドウが一瞬出てすぐに消えるという意味です。
whileの1周目で即終了するプログラムになっているので、
draw_map、vector_○○、map_check関数の中身がわからないですが、これらの関数からはすぐ処理が帰ると仮定すれば、直感に反しない動作です。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

pg78445
記事: 10
登録日時: 7年前

Re: WinMainに値を返さない?

#5

投稿記事 by pg78445 » 5年前

whileループ内にDxLib_End();とreturn 0;があるため1回目のループ時にDxLib_End();とreturn 0;が実行されプログラムが終了しています。
whileループの外にDxLib_End();とreturn 0;を記述してください。

値を返さないコントロールパスがありますというメッセージはwhile文の条件次第でreturn文が実行されない可能性があるため出ています。
whileループの外にreturn文を記述することで出なくなると思います。

Qloeh
記事: 35
登録日時: 5年前

Re: WinMainに値を返さない?

#6

投稿記事 by Qloeh » 5年前

直してみたところ上手くいきました。
中括弧の位置を間違えていたようです。
簡単なミスでお騒がせしてすみませんでした。

閉鎖

“C言語何でも質問掲示板” へ戻る