- ベストアンサー
Cのソースファイルにすると警告が出る理由
- C言語のソースファイルをビルドすると警告が出る理由について詳しく教えてください。
- ソースファイルの拡張子を変更することで警告が消えたが、なぜ拡張子が影響するのか教えてください。
- 拡張子を変更せずに警告を消す方法はありますか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
CではNULLは(void*)0と定義されるので、それを整数型をtypedefしたMCIDEVICEIDやDWORD_PTRに代入しようとすると警告されます。 C++にすると、NULLは単なる0と定義されるので、整数型に代入可能になります。 あくまでVisualStudioでの話で、他の環境では定義が異なる可能性はあります。
その他の回答 (1)
- kumatti1
- ベストアンサー率60% (73/121)
いやいや、警告は下2つで上のはコンパイルエラーでは。 >int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR,int nCmdShow) ↓ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE h, LPSTR s, int nCmdShow) 手抜きせずにきちんと仮引数名を宣言すれば、コンパイルは通りますよ。
補足
すいません間違えて違うソースを載せてしまいました。 こちらが問題のファイルでした。エラーは出ないのですが警告が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; }
お礼
回答ありがとうございました。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); に変更したら無事警告が消えました。