好的,我现在一直在研究调试器,我已经创建了一个假设在调试器中执行命令的按钮。但无论我做什么,它都没有正确地完成,这是两个案例的代码。
case Execute_Button:
INPUT_FIELD;
break;
case INPUT_FIELD:
if (HIWORD(wParam) == EN_MAXTEXT) {
char cText[INPUT_CHAR_LIMIT];
SendMessage((HWND)lParam, WM_GETTEXT, INPUT_CHAR_LIMIT, (LPARAM)cText);
if (strcmp(cText, "") == 0)
break;
SendMessage((HWND)lParam, WM_SETTEXT, NULL, (LPARAM)"");
//std::string command = cText;
HandleCommand(cText);
}
break;
}
break;
有任何帮助吗?老实说,我不知道该怎么做。
答案 0 :(得分:0)
C ++没有提供从一个案例跳到另一个案例的方法,但有一个例外:如果你没有break
,continue
,return
或其他类型的控件在一个案例正文的末尾的流程声明,它将落入下一个案件正文(不再检查条件)。
如果ExecuteButton
和INPUT_FIELD
彼此相邻,那么
case ExecuteButton:
case INPUT_FIELD:
// shared code
或ExecuteButton
可以在INPUT_FIELD
之前拥有自己的代码。
case ExecuteButton:
// some code
// fall through
case INPUT_FIELD:
// shared code
// fall through
评论不是必需的,但包含它会使您的代码更明确,供其他人阅读。
但是,如果ExecuteButton
和INPUT_FIELD
不相邻,则必须重新构建代码,以将共享代码放在其他位置(例如函数),两者都可以自由访问它。
至于
INPUT_FIELD;
之所以做什么,但仍然编译,是因为C ++中基本的语句类型是“表达式语句”。请记住,赋值和函数调用是C ++中的表达式。每当您进行分配或函数调用时,例如
x = y + z;
somethingThatReturns(x, y);
您实际上正在评估执行赋值或函数调用的表达式,并导致值被丢弃的值(y + z
和函数的返回值)。所以
INPUT_FIELD;
会变成类似
的东西 456; // or whatever the value of INPUT_FIELD is
然后编译器会忽略它而不会出错。