if (m_power = 1) // 錯誤!這是賦值,結果恆為真
LoadMenu(IDR_MAINMENU);
else
LoadMenu(IDR_MENU3);
結果:無論 `m_power` 為 0 或 1,皆載入 `MAINMENU`。
if (m_power == 1) // 比較運算
LoadMenu(IDR_MAINMENU);
else
LoadMenu(IDR_MENU3);
// 資源檔定義多個菜單 IDR_MENU_ADMIN, IDR_MENU_USER, IDR_MENU_GUEST
// 程式碼
UINT GetMenuResourceByPower(int power) {
switch (power) {
case 1: return IDR_MENU_ADMIN;
case 2: return IDR_MENU_USER;
default: return IDR_MENU_GUEST;
}
}
// 初始化
m_hMenu = LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCE(GetMenuResourceByPower(m_power)));
SetMenu(m_hMenu);
避免硬編碼 `if-else` 鏈,擴充權限層級只需增 `case`。
經典 C/C++ 低級錯誤:**條件判斷寫成賦值 `=`**。修正為 `==`,並養成 **Yoda 條件** 或 **開啟高等級警告** 習慣,從編譯期攔截此類 Bug。菜單載入邏輯建議表驅動化,提升可維護性。