Имам C Win32 програма
Има функция за манипулиране на съобщения, която има оператори за превключване на регистъра за обработка на съобщения.
Има едно явление, което ме удиви... Ще се опитам да го обясня с прости думи.
switch (Message)
{
case 0:
printf("Case 0 \n");
break;
case 1:
printf("Case 1 \n");
break;
printf("After Break Case 1 \n");
case 2:
switch( WHAT_SC(wParam) ) {
case 1:
case 2:
if (KEYBOARD_UNLOCKED()) {
defstatus = DefWindowProc(hWnd, iMessage, wParam, lParam);
}
break;
case 3:
if (bLockWindowSize) {
return (TRUE);
}
default:
defstatus = DefWindowProc(hWnd, iMessage, wParam, lParam);
break;
}
break;
HANDLE_MSG(hWnd, WM_COMMAND, Func_OC);
case 3:
printf("Case 3 \n");
break;
printf("After Break Case 3 \n");
default :
printf("default \n");
break;
printf("After Break default \n");
}
(Кодът по-горе е само псевдо код) В даден момент командата след прекъсването се изпълнява. т.е.
HANDLE_MSG(hWnd, WM_COMMAND, Func_OC);
Защо/как е така?
Благодаря
break
? Компилаторът не даде ли предупреждение за недостижим код? Променете нивото на предупреждение до най-високото ниво (/W4). - person doptimusprime   schedule 10.06.2014HANDLE_MSG
се изпълнява от този код? Callstack проверява ли това? - person doptimusprime   schedule 10.06.2014