• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Cのソースファイルにすると警告が出る理由)

Cのソースファイルにすると警告が出る理由

このQ&Aのポイント
  • C言語のソースファイルをビルドすると警告が出る理由について詳しく教えてください。
  • ソースファイルの拡張子を変更することで警告が消えたが、なぜ拡張子が影響するのか教えてください。
  • 拡張子を変更せずに警告を消す方法はありますか?

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

  • ベストアンサー
回答No.2

CではNULLは(void*)0と定義されるので、それを整数型をtypedefしたMCIDEVICEIDやDWORD_PTRに代入しようとすると警告されます。 C++にすると、NULLは単なる0と定義されるので、整数型に代入可能になります。 あくまでVisualStudioでの話で、他の環境では定義が異なる可能性はあります。

nazoda
質問者

お礼

回答ありがとうございました。mciSendCommandの所を mciSendCommand((MCIDEVICEID)NULL,MCI_OPEN,MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,(DWORD_PTR)&mop); mciSendCommand(mop.wDeviceID,MCI_PLAY,(DWORD_PTR)NULL,(DWORD_PTR)&play); に変更したら無事警告が消えました。

その他の回答 (1)

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.1

いやいや、警告は下2つで上のはコンパイルエラーでは。 >int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR,int nCmdShow) ↓ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE h, LPSTR s, int nCmdShow) 手抜きせずにきちんと仮引数名を宣言すれば、コンパイルは通りますよ。

nazoda
質問者

補足

すいません間違えて違うソースを載せてしまいました。 こちらが問題のファイルでした。エラーは出ないのですが警告が4つでます。 warning C4047: '関数' : 間接参照のレベルが 'MCIDEVICEID' と 'void *' で異なっています。 warning C4024: 'mciSendCommandW' : の型が 1 の仮引数および実引数と異なります。 warning C4047: '関数' : 間接参照のレベルが 'DWORD_PTR' と 'void *' で異なっています。 warning C4024: 'mciSendCommandW' : の型が 3 の仮引数および実引数と異なります。 という警告が出るのでなぜこの警告が出るのか知りたいです。 #include<Windows.h> #include "resource.h" #include<MMSystem.h> #pragma comment(lib,"winmm.lib") HINSTANCE hinst; INT_PTR CALLBACK dlgproc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst, LPSTR lpszArgs,int nWinMode) { hinst=hThisInst; DialogBox(hinst,TEXT("mydlg"),NULL,dlgproc); return 0; } INT_PTR CALLBACK dlgproc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp) { static MCI_OPEN_PARMS mop; static MCI_PLAY_PARMS play; switch(msg) { case WM_INITDIALOG: mop.lpstrDeviceType=TEXT("WaveAudio"); mop.lpstrElementName=TEXT("C:\\Users\\test.wav"); mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,(DWORD_PTR)&mop); mciSendCommand(mop.wDeviceID,MCI_PLAY,NULL,(DWORD_PTR)&play); return (INT_PTR)TRUE; case WM_CLOSE: EndDialog(hwnd,LOWORD(wp)); return (INT_PTR)TRUE; break; } return(INT_PTR)FALSE; }

関連するQ&A