MFC 代碼中寫 CATCH(CFileException, e),中間用逗號分隔,若寫成 CATCH(CFileException e) 則報錯。
MFC 異常宏定義(簡化版):
#define CATCH(exception_class, exception_var) \
catch (exception_class* exception_var)
使用時:
TRY {
// 可能拋出 CFileException* 的代碼
}
CATCH(CFileException, e) {
// e 是 CFileException*
e->ReportError();
}
END_CATCH
逗號分隔是因為宏接受兩個獨立參數:異常類名和變量名,展開為標準 C++ catch (CFileException* e)。
| 特性 | MFC 宏 (TRY/CATCH) | 標準 C++ (try/catch) |
|---|---|---|
| 捕獲類型 | 指針 (CException*) | 引用/值 (const std::exception&) |
| 拋出方式 | THROW(new CFileException(...)) | throw MyException(...) |
| 內存管理 | 框架自動 delete | 自動棧展開 |
| 跨模塊 | 僅限 MFC 內部 | 通用 |
try/catch),配合 RAII。TRY 塊中拋出標準異常不會被 CATCH 捕獲,反之亦然。