C语言 break执行后的切换命令



我有一个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");
}

(以上代码只是伪代码)在某个时刻,执行break之后的命令。例如

 HANDLE_MSG(hWnd, WM_COMMAND, Func_OC);

为什么?

谢谢

问题解决…

 HANDLE_MSG(hWnd, WM_COMMAND, Func_OC); 

在这里执行,原因如下

HANDLE_MSG(是一个宏。当我查看它的定义时,我在WindowsX.h

中看到以下代码
 #define HANDLE_MSG(hwnd, message, fn)    
     case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))

发生的是,宏HANDLE_MSG在开关的情况下。被替换为windowxp .h

中的代码

作为另一种情况,因此执行时返回。

感谢每一个试图帮助我的人。

(Cup和dBase值得特别感谢)

的问候

只有当break语句在switch或switch case中的其他switch case中制动任何循环时才会发生这种情况。

如果你看到

 HANDLE_MSG(hWnd, WM_COMMAND, Func_OC); 

正在执行,那么"case 3 "必须执行。

最新更新