Я могу только повторить вышесказанное - это зависит от вашего приложения.
Хорошее практическое правило - выявлять ошибки как можно раньше. Как правило, это помогает легче, быстрее и дешевле найти и исправить проблему. В идеале вы бы поймали это во время разработки. Как вы указали, вы не можете поймать его во время компиляции (если не переключитесь на язык «дизайн по контракту», такой как Eiffel), поэтому вы поймаете его во время выполнения.
А потом ... это зависит ...
Если это настольное приложение, то, возможно, огромное диалоговое окно и выход - самый быстрый способ исправить его, если он заставляет кого-то сообщать об ошибке. Если вы можете, это также может быть идея отправить электронное письмо разработчику (например, если это собственное приложение).
Если это критическое или жизненно важное значение, возможно, вам просто нужно перезапустить приложение (это общий подход во встроенных системах).
Что бы вы ни решили, постарайтесь собрать как можно больше информации о проблеме. Например, вы можете перевернуть свой выигранный макрос, чтобы обернуть вокруг ASSERT, который добавляет FILE и LINE ).
Я использую следующее:
#ifdef TESTING
#define ASSERT_MSG(subsystem, message, condition) if (!(condition)) {printf("Assert failed: \"%s\" at line %d in file \"%s\"\n", message, __LINE__, __FILE__); fflush(stdout); abort();}
/* we can also use this, which prints of the failed condition as its message */
#define ASSERT_CONDITION(subsystem, condition) if (!(condition)) {printf("Assert failed: \%s\" at line %d in file \%s\"\n", #condition, __LINE__, __FILE__); fflush(stdout); abort();}
#else
#define ASSERT_MSG(subsystem, message, condition) if (!condition) DebugTrace(FATAL, subsystem, __FILE__, __LINE__, "%s", message);
#define ASSERT_CONDITION(subsystem, condition) if (!(condition)) DebugTrace(FATAL, subsystem, __FILE__, __LINE__, "%s", #condition);
#endif