关于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的问题吧!