Return文について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
にべにべ

Return文について

#1

投稿記事 by にべにべ » 14年前

現在、”猫でもわかるWindowsプログラミング”勉強しているのですが、以下のreturn文の意味が
わかりません。WndPRoc以下
・26行目のreturn文の後は"-1"である必要があるのでしょうか?
ためしに0を入れたり、さらには31行目return文の後に-1を入れても問題なく動いているようで
その意味合いが今になってよくわからないのです・・・

コード:

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
	int id;
	static HWND hEdit;
	switch (msg) {
                         //*CreateWindowは省略*//
		case WM_COMMAND:
			switch(LOWORD(wp)){
			case IDM_NEW:
				MyNew(hEdit); 
				break;
			}
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
		default:
			return (DefWindowProc(hWnd, msg, wp, lp));
	}
	return 0;
}

int MyNew(HWND hEdit){
	int id;
	id = MyConfirm(hEdit); //*関数の中身は省略 →ここでIDCANCELが帰った場合
	if(id == IDCANCEL){
		return -1;
	}
	Edit_SetText(hEdit,TEXT(""));
	SetWindowText(GetParent(hEdit),TEXT("猫猫"));
	lstrcpy(szFile,TEXT(""));
	return 0;
}

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: Return文について

#2

投稿記事 by bitter_fox » 14年前

にべにべ さんが書きました:現在、”猫でもわかるWindowsプログラミング”勉強しているのですが、以下のreturn文の意味が
わかりません。WndPRoc以下
・26行目のreturn文の後は"-1"である必要があるのでしょうか?
ためしに0を入れたり、さらには31行目return文の後に-1を入れても問題なく動いているようで
その意味合いが今になってよくわからないのです・・・

コード:

			case IDM_NEW:
				MyNew(hEdit); 
				break;

コード:

int MyNew(HWND hEdit){
	int id;
	id = MyConfirm(hEdit); //*関数の中身は省略 →ここでIDCANCELが帰った場合
	if(id == IDCANCEL){
		return -1;
	}
	return 0;
}
MyNew関数の戻り値は成功したかどうかを返しています。

このプログラムではMyNew関数の戻り値を使ってないので戻り値に意味がないように見えますが、
次のように変更すると意味がはっきりとわかります。

コード:

			case IDM_NEW:
				if (MyNew(hEdit) == -1)
				{
					MessageBox(hWnd, "キャンセルされたため、一部処理が実行されませんでした。", NULL, MB_OK);
				}
				else
				{
					MessageBox(hWnd, "正常に実行されました。", "メッセージボックス", MB_OK);
				} 
				break;
このようにすると、戻り値が-1の時にキャンセルされたと判断しているので、MyNewのキャンセル時の戻り値は-1でなくてはいけないですね。
(ちなみに、正常終了の時と重複してなければどの値を返しても問題ないです。(呼び出し元で変更が生じますが・・・))

アバター
kimuchi
記事: 163
登録日時: 14年前
住所: 東京

Re: Return文について

#3

投稿記事 by kimuchi » 14年前

このプログラム(貼っていただいたものを見る限り)では確かに使われていませんが、
MyNew関数実行時の返り値を利用した分岐を想定していたのだと思います。

例えば10行目の
MyNew(hEdit);を
if(MyNew(hEdit)==-1)/* idがIDCANCELだった時の処理 */;
のようにしたりできます。
特にダイアログなどでは「OK」と「Cancel」で処理を分けるのが普通ですよね。

にべにべ

Re: Return文について

#4

投稿記事 by にべにべ » 14年前

早速の返信ありがとうございます。

戻り値に対してなんらの処理がなく、プログラミング上で別の深い意味合いがあるのではないかと
勘違いしておりました。
つまらない質問で申し訳ありませんが、とてもすっきりしました。

ありがとうございました。

閉鎖

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