我想實現此行爲:如何使健壯的斷言?
- 當程序在調試模式下運行,
assert_robust(expression, commands)
工作嚴格喜歡古典assert(expression)
- 當程序在發佈模式下運行,
assert_robust(expression, commands)
執行一些commands
如果表達式爲假
這是可以做到這樣:
#ifdef NDEBUG
#define assert_robust(expression, command) if (!(expression)) command;
#else
#define assert_robust(expression, command) assert(expression);
#endif
這可以用於例如這樣做myfunction
容錯:
char myfunction(const string& s, int i)
{
assert_robust(i >= 0, return '\0');
/* Normal code */
}
這項工作做得很好,但如何讓支持的命令不止一個(任意)號宏assert_robust
? (最好用標準C++的方式)
而另一個問題是:
是它是在調試嚴格和善意的釋放好事嗎?
編輯:我的想法,爲什麼做這樣的事情是因爲,如果它是在程序,該程序有時比保持崩潰時和用戶丟失其數據有點怪異的錯誤practicaly好得多。
這聽起來很像嘗試使用assert進行錯誤處理...(這不是一個好主意TM) – Xarn
@ Xarn:你能解釋爲什麼它不是個好主意嗎? – user3123061
斷言通常意味着程序員可以使用它來檢查自己的工作,其中錯誤處理(返回碼,異常,errno)旨在提供對公共API的檢查。 (斷言基本上證明了你認爲的邏輯上不可能的執行狀態,因此你不應該將它們絆倒。例外情況說明別人搞砸了。) – Xarn