2011-02-25 47 views
0

我需要創建一個異常處理,因爲我也問打印像C++ - 有什麼辦法來得到當前執行行

操作的狀態「文件打開:操作成功完成」

「文件關閉:操作成功完成」,

是否有這種類似__LINE__,__FUNCTION__,__FILE__任何宏?

或者是否有任何提升功能可以做到這一點?

+3

我沒有看到標題和問題的其餘部分之間的關​​系? – MSalters 2011-02-25 08:46:54

+0

你問關於獲取程序運行的當前行嗎?就像你會在一步一步的調試器中做的一樣? – ereOn 2011-02-25 08:54:09

+0

@ereOn正好。我想在執行時看到每一行(如調試器)。 – prabhakaran 2011-02-25 08:55:24

回答

2

我認爲答案就是你想要將你正在評估的表達串聯起來?

代碼:

#include <stdexcept> 
#include <sstream> 
#include <iostream> 

void check_result(bool result, const char* file, int line_number, const char* line_contents) 
{ 
    if (!result) { 
     //for example: 
     std::stringstream ss; 
     ss << "Failed: " << line_contents << " in " << file << ' ' << line_number; 
     throw std::runtime_error(ss.str()); 
    } 
} 

#define CALL_AND_CHECK(expression) check_result((expression), __FILE__, __LINE__, #expression) 

bool foobar(bool b) { return b; } 

int main() 
{ 
    try { 
     CALL_AND_CHECK(foobar(true)); 
     CALL_AND_CHECK(foobar(false)); 
    } catch (const std::exception& e) { 
     std::cout << e.what() << '\n'; 
    } 
} 
+0

棒極了。它完全按照我的預期工作。謝謝。 – prabhakaran 2011-02-26 04:52:54

1

我不知道你問什麼,但這裏是從我自己的庫中的代碼示例:

/** 
* \brief Convenient alias to create an exception. 
*/ 
#define EXCEPTION(type,msg) type((msg), __FUNCTION__, __FILE__, __LINE__) 

基本上,這讓我寫:

throw EXCEPTION(InvalidParameterException, "The foo parameter is not valid"); 

當然這裏,InvalidParameterException是我設計的一個類,它需要額外的參數來保存函數,文件和創建異常的行。

它具有以下構造:

InvalidParameterException::InvalidParameterException(
    const std::string& message, 
    const std::string& function, 
    const std::string& file, 
    int line); 

當然,如果你不想拋出異常,而輸出的東西,說一個日誌文件,可以很明顯的使用同樣的「貓膩」。

希望這會有所幫助。

+0

我需要當前行。像pITask-> open()一樣。運行應用程序時,此行必須反映在屏幕上。 – prabhakaran 2011-02-25 08:49:47

+0

@prabhakaran:那麼,你必須告訴我們「當前行」是什麼給你的。 '__LINE__'擴展到寫入的行號。 – ereOn 2011-02-25 08:51:06

2

兩個__LINE____FILE__在C++中是可用的,就像在C.唯一需要注意的是,他們的宏,在編譯時展開,因此,如果您在宏或模板,他們堅持他們可能會或可能不會做你期望。

相關問題