Вот моя версия макроса assert, который принимает сообщение и распечатывает все ясно:
#include <iostream>
#ifndef NDEBUG
# define M_Assert(Expr, Msg) \
__M_Assert(#Expr, Expr, __FILE__, __LINE__, Msg)
#else
# define M_Assert(Expr, Msg) ;
#endif
void __M_Assert(const char* expr_str, bool expr, const char* file, int line, const char* msg)
{
if (!expr)
{
std::cerr << "Assert failed:\t" << msg << "\n"
<< "Expected:\t" << expr_str << "\n"
<< "Source:\t\t" << file << ", line " << line << "\n";
abort();
}
}
Теперь вы можете использовать это
M_Assert(ptr != nullptr, "MyFunction: requires non-null argument");
И в случае неудачи вы получите сообщение, подобное этому:
Ошибка подтверждения: MyFunction: требуется ненулевой аргумент
Ожидается: ptr! = Nullptr
Источник: C: \ MyProject \ src.cpp, строка 22 * 1014 *
Красиво и чисто, не стесняйтесь использовать его в своем коде =)