關于switch()語句裡case分支的寫法,我一直以為case後執行到break就結束,沒必要用{ }.今天寫了個程式,竟然出現了一個奇怪的錯誤 error C2360: initialization of 'hbm' is skipped by 'case' label
error C2360: initialization of 'dc' is skipped by 'case' label
switch(message)
{
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
HDC dc=CreateCompatibleDC(hDC);
HBITMAP hbm=(HBITMAP)LoadImage(hInst,MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0,LR_DEFAULTSIZE);
SelectObject(dc,hbm);
BitBlt(hDC,0,0,1280,720,dc,0,0,SRCCOPY);
DeleteObject(SelectObject(dc, hbm));
DeleteObject(hbm);
DeleteDC(dc);
EndPaint(hwnd,&ps);
break;
......
......
}
想了很久不知道錯在哪兒了,後來給case後面的代碼加上{}就OK了。
經過多次測試,我發現case後的語句如果有變量的初始化,必須加{}。文法裡好像沒這個規定,可能是VC的問題吧!