У меня есть макрос ASSERT(x)
, и я хочу вызвать return
, если он утверждает (в конфигурации выпуска).
Для этого мне нужно знать тип возвращаемого значения функции, где я использую это ASSERT
. Как его получить (я имею дело с C++03
, LLVM GCC 4.2
компилятором)?
Мой макрос ASSERT:
#define ASSERT(x) \
if(!(x)) {
LOG ("ASSERT in %s: %d", __FILE__, __LINE__); \
return /*return_type()*/; \
}
PS: я пытался return 0;
- компилятор показывает ошибку для пустых функций (и я не пробовал это для сложных возвращаемых типов), если return;
- ошибка для не пустых функций.
(обновление ...)
Я отвечу Оборотень , Ньярлатхотеп и JDV-Ян де Ваан здесь. Я использую стандарт assert
для конфигурации отладки. Но после бета-тестирования я все еще получаю отчеты о сбоях от конечных клиентов, и в большинстве случаев мне нужно изменить свои функции сбоя:
ASSERT (_some_condition_);
if (!_some_condition_) // add this return
return _default_value_;
Я понимаю, что моя программа может произойти сбой, вероятно, позже (в противном случае она определенно потерпит крах в текущей функции). Также я не могу выйти из приложения, потому что разработка для iPhone (приложения могут не выходить программно там). Таким образом, самый простой способ - это «автоматический возврат», если утверждение не удалось.