我有成功返回零一個功能,或者檢測到錯誤的行號:C++外部可見常量
int func() {
// stuff
if (something is wrong) {
return __LINE__;
}
// more stuff
if (something else is wrong) {
return __LINE__;
}
// all good
return 0;
}
真實呼叫者只檢查返回值是否爲零或不經常這樣:
int ret = func();
if (ret != 0) {
return ret;
}
然而,在測試中,我想檢查實際的返回值,以驗證某些故障條件被觸發:
int ret = func();
EXPECT_EQ(42, ret);
這提出了一個問題,因爲當編輯func()的源文件時,返回語句的行以及返回的值也會改變。我希望行號值可用於func()的調用者。
是可能的「出口」行號這樣的:
// header
extern const int line_number;
// source
const int line_number = __LINE__;
不幸的是,這隻適用於功能的外線號碼。我想這樣的:
if (something is wrong) {
const int line_number = __LINE__; return __LINE__;
// or some other const thing
}
可以從另一個翻譯單位(文件)讀取。
我試過static const int line = __LINE__
,但有兩個缺陷:
- 它不是在頭宣佈的
line_number
定義。 - 它可能不會被設置,直到執行通過它。
C不是C++不是C!不要爲無關語言添加標籤。 – Olaf
如果你需要返回代碼,返回一個'enum'值將是一個可能的解決方案,而不是行號。 – crashmstr
爲什麼不用失敗類型的'enum'並返回失敗的'enum'值。這將從文件配置中分離錯誤報告。 – NathanOliver