Здравствуйте, Sinclair, Вы писали:
S>В тех местах, где мы не можем гарантировать корректных параметров, вместо ассерта надо писать логику обработки. Примерно так:
S>S>int RegisterUser(char * szFirstName, char* szLastName)
S>{
S> ASSERT(szFirstName != NULL); // внещний код обязан передать нам валидный поинтер!
S> ASSERT(szLastName != NULL);
S> if(strlen(szLastName) == 0) // а вот тут уже пользовательский ввод
S> {
S> return -1; // возвращаем код ошибки, чтобы вызывающий код мог отразить это в интерфейсе
S> }
S> return SaveToDb(szFirstName, szLastName);
S>}
S>
Имхо, самая большая проблема ASSERT-ов это то, что они выбрасываются из production кода. Абыдна бывает получать в production ошибку в функции RegisterUser (или даже в дебрях SaveToDb) из-за того, что где-то выше один из szFirstName, szLastName получился нулевым. Благодоря ASSERT-ам мы теряем возможность быстро продиагностировать проблему.
А отладить все невозможно. Поэтому и в production системах баги, к сожалению, есть.
... << RSDN@Home 1.1.4 stable rev. 510>>