关于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的问题吧!
本文探讨了在使用C++中的switch-case结构时遇到的一个奇怪的编译错误,详细介绍了错误信息并提供了出现问题的代码片段。通过实验发现,当case分支中包含变量初始化时,使用花括号将这些语句包裹起来可以避免错误。
484

被折叠的 条评论
为什么被折叠?



