天天看點

DEBUG筆記四

關于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的問題吧!