在以下两个定义中产生错误C2360的巨大差异在哪里?
switch (msg) {
case WM_PAINT:
HDC hdc;
hdc = BeginPaint(hWnd, &ps); // No error
break;
}
和
switch (msg) {
case WM_PAINT:
HDC hdc = BeginPaint(hWnd, &ps); // Error
break;
}
答案 0 :(得分:9)
第一个是合法的,第二个不是。有时允许在没有初始化程序的情况下跳过声明,但从不使用初始化程序。
请参阅Storage allocation of local variables inside a block in c++。
答案 1 :(得分:1)
在一种情况下声明变量时,从技术上讲,下一种情况在技术上仍处于相同的范围内,因此您可以在那里引用它,但是如果在没有首先遇到该情况的情况下遇到该情况,则最终将调用未初始化的变量。此错误可以防止这种情况。
您需要做的就是在switch语句之前定义它,或者使用花括号{}确保它在退出特定情况之前超出范围。
开关(msg){ 情况WM_PAINT: { HDC hdc; hdc = BeginPaint(hWnd,&ps); } 打破; }