![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e6f04cf)
よろしくお願いします。
vc++2005を使ってコンパイルした時、プログラムの『691行目と、689行目』の所に緑色の(∥チェック)が付いていて、次のような警告が出たのですが、
これは、『記述する場所が間違っている』と解釈して良いでしょうか?
------ ビルド開始: プロジェクト: memo, 構成: Release Win32 ------
コンパイルしています...
c:\memo\memo\memo.cpp(691) : warning C4715: 'NewProc' : 値を返さないコントロール パスがあります。
コード生成が終了しました。
マニフェストを埋め込んでいます...
ビルドログは "file://c:\Visual Studio 2005\Projects\memo\memo\Release\BuildLog.htm" に保存されました。
memo - エラー 0、警告 21
========== ビルド: 1 正常終了、0 失敗、0 更新、0 スキップ ==========
//サブクラス化後のプロシージャ
LRESULT CALLBACK NewProc(HWND hWnd, UINT msg,
WPARAM wp, LPARAM lp)
{
POINT pt;
static HMENU hMenu;
static HMENU hSubMenu;
int id;
switch (msg){
case WM_RBUTTONDOWN: //ポップアップメニューを作る
hMenu = LoadMenu(hInst, "MYMENU2");
hSubMenu = GetSubMenu(hMenu, 0);
pt.x = LOWORD(lp);
pt.y = HIWORD(lp);
ClientToScreen(hWnd, &pt);
TrackPopupMenu(hSubMenu, TPM_LEFTALIGN,
pt.x, pt.y, 0, hWnd, NULL);
DestroyMenu(hMenu);
break;
case WM_COMMAND:
switch (LOWORD(wp)){
case IDM_NEW:
MyNew(hWnd);
break;
/*case IDM_SAVE:
MySave(hWnd);
break;*/
case IDM_SAVEAS:
MySaveAs(hWnd);
break;
case IDM_OPEN:
MyOpen(hWnd);
break;
case IDM_END:
if(SendMessage(hWnd, EM_GETMODIFY, 0, 0) == FALSE){
id = MessageBox(hWnd, TEXT("終了してもいいですか"),
TEXT("確認"), MB_YESNO | MB_ICONQUESTION);
if(id == IDYES){
DestroyWindow(hWnd);
PostQuitMessage(0);
}
}
if(SendMessage(hWnd, EM_GETMODIFY, 0, 0) == TRUE){
id = MessageBox(hWnd,
TEXT("文書が更新されています、\n変更を保存しますか?"),
TEXT("メモ帳"),
MB_YESNOCANCEL | MB_ICONEXCLAMATION);
if(id == IDYES){
MySave(hWnd); //MySaveAs(hWnd);
}else if (id == IDCANCEL){
return IDCANCEL;
}/*else if (id ==IDNO){ *///ここを記述すると
//文書保存ダイアログでキャンセルした時に、『終了しない』
id = MessageBox(hWnd, TEXT("終了してもいいですか"),
TEXT("確認"), MB_YESNO | MB_ICONQUESTION);
if(id == IDYES){
DestroyWindow(hWnd);
PostQuitMessage(0);
}
}
}
break;
default:
689行目 return CallWindowProc(OldProc, hWnd, msg, wp, lp);
}
691 行目 }
No.2ベストアンサー
- 回答日時:
※ ANo.1 の回答者の方が回答されておられるので蛇足にしかなりませんが。
> warning C4715
このような警告は、条件処理で「return 戻り値」とする場合において、条件以外の処理となった場合に
関数からの戻り値を返さない記述がされていると発生します。
例としては以下のような場合があります。
コンパイラの警告 (レベル 1) C4715 (C++)
http://msdn2.microsoft.com/ja-jp/library/6deaf4k …
if で合致しない値になった時に、関数からの値を返さないもの
int func(int arg)
{
if(arg == ID_A)
{
return 1;
}
else if (arg == ID_B)
{
return 2;
}
}
switch ~ case で合致しない値となった時に、関数からの値を返さないもの
int func(int arg)
{
switch(arg)
{
case ID_A:
return 1;
break;
case ID_B:
return 2;
break;
}
}
対処としては条件値と合致しない場合にも関数からの戻り値を返すようにします。(if の場合の記述は省略)
int func(int arg)
{
switch(arg)
{
case ID_A:
return 1;
break;
case ID_B:
return 2;
break;
default:
return 0;
break;
}
}
または
int func(int arg)
{
switch(arg)
{
case ID_A:
return 1;
break;
case ID_B:
return 2;
break;
}
return 0;
}
いかなる条件でも関数が値を返すよう記述されるていると警告が避けられます。
丁寧なアドバイス有難うございます。
色々と試していたため、御礼が遅れてしまいました。
無事に警告を消すことが出来ました。プログラム的には、まだ完成してはいないのですが、これで先に進むことが出来ます。
No.1
- 回答日時:
switch(msg)の
case WM_RBUTTONDOWN:
case WM_COMMAND:
などから 戻る際の返り値が無いためです
処理した場合 0を返すような return 0; を NewProcの最後にでも記述してください
普通は 独自プロシージャの最後に 処理しなかったメッセージに対し
return DefWindowProc( hWnd, msg, wParam, lParam );
と言った記述をし default:を省略するほうが多いように思います
回答有難うございます。
色々と試していたため、御礼が遅れてしまいました。
警告は、無事に消すことが出来ました。
また、処理をしない時の記述も参考にしたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
return文がない場合の戻り値は...
-
コンソールアプリケーションの...
-
ツリーコントロールの開閉アイ...
-
2曲同時再生するにはどうした...
-
「指定されたキャストは有効で...
-
Enterキーを押されたら次の処理...
-
数字列を3桁ごとにカンマで区切...
-
Aの値からBの値を除するとは??
-
c++でテンプレートのコードでわ...
-
信頼区間の1.96や1.65ってどこ...
-
3桁区切(コンマ)記号をつけ...
-
c言語で、繰り返し文の中で、0....
-
2÷3などの余りについて
-
C言語 エラーの原因がわからな...
-
数字以外が入力されたらエラー...
-
C言語のサイコロシミュレート
-
DWORDの実際の型は何でしょうか
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語での引数の省略方法
-
プログラミングの問題です 「金...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Win32APIでウィンドウを中央に...
-
エラー Run-Time Check Failur...
-
コンソールアプリケーションの...
-
MessageBoxについて
-
画像を表示したいのですが……
-
【Windowsアプリ】ファイルのド...
-
PeekMessageについて
-
キャレットの現在位置の表示 (W...
-
C言語win32api、エディットボッ...
-
ボタンの色(WINAPI)
-
Win32APIにて、ウィンドウ全体...
-
音量調節
-
エディットコントロール入力時...
-
ダイアログプログラムでEnterキ...
-
不明なエラー
-
C++のcase文の書き方
-
オーバーレイみたいな処理がしたい
-
ゲームとかの解像度変更&全画...
-
WM_CREATE について
-
LoadImageとSetCursorについて
おすすめ情報