Bạn đã hết may mắn tại đây. Cách tốt nhất là xác định macro assert
của riêng bạn.
Về cơ bản, nó có thể trông như thế này:
#ifndef NDEBUG
# define ASSERT(condition, message) \
do { \
if (! (condition)) { \
std::cerr << "Assertion `" #condition "` failed in " << __FILE__ \
<< " line " << __LINE__ << ": " << message << std::endl; \
std::terminate(); \
} \
} while (false)
#else
# define ASSERT(condition, message) do { } while (false)
#endif
này sẽ xác định các ASSERT
vĩ mô chỉ nếu không debug vĩ mô NDEBUG
không được định nghĩa.
Sau đó, bạn muốn sử dụng nó như thế này:
ASSERT((0 < x) && (x < 10), "x was " << x);
Đó là một chút đơn giản hơn sử dụng của bạn vì bạn không cần phải stringify "x was "
và x
một cách rõ ràng, điều này được thực hiện ngầm bằng vĩ mô.
Nguồn
2010-09-22 09:24:59
Tôi nghĩ ở đây bạn có [answer] tốt hơn (http://stackoverflow.com/questions/3692954/add-custom-messages-in-assert) –
Hack xấu xí: 'if (fail_condition) khẳng định (!" Thông báo của tôi ");' –
@MarkKCowan, tôi nghĩ rằng "xấu xí hack" của bạn thực sự là cách tốt hơn so với "&&" vá lên, bởi vì nó chỉ hiển thị thông báo :) – NL628