首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MFC 異常處理宏 CATCH 參數逗號的含義:宏展開與標準 C++ 異常的區別

     編輯:程式設計綜合問答

現象

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)。

與標準 C++ 異常的區別

特性MFC 宏 (TRY/CATCH)標準 C++ (try/catch)
捕獲類型指針 (CException*)引用/值 (const std::exception&)
拋出方式THROW(new CFileException(...))throw MyException(...)
內存管理框架自動 delete自動棧展開
跨模塊僅限 MFC 內部通用

建議

  • 新代碼優先使用標準 C++ 異常(try/catch),配合 RAII。
  • 維護舊 MFC 代碼時,保持宏風格一致,注意指針捕獲。
  • 不可混用:TRY 塊中拋出標準異常不會被 CATCH 捕獲,反之亦然。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved