оказаться, что проверка всех

Автор admin Среда, 6 мая 2009 11:32

оказаться, что проверка всех утверждений слишком сильно отразится на его эффективности. Но в этом случае существует простой выход: автоматически удалить код утверждений. Для этого достаточно определить макрос N DEBUG и построить приложение заново. Чтобы вы лучше поняли, как это делается, рассмотрим типичную реализацию assert(): #ifdef NDEBUG Idefine assert(cond) ((void)O) #else void assertlmpl(const char*, const char*, long); Idefine assert(cond) \ ((cond) ? (void)O : assertlmpl(???)) #endif При определенном макросе NDEBUG этот фрагмент вырождается в выражение (void)0, поэтому в потоке компиляции фактически остается лишь пустая команда — результат присутствия символа точки с запятой (;) после каждого вызова assert(). Если символическая переменная NDEBUG не определена, assert(cond) расширяется до условной команды, которая при нулевом условии cond вызывает функцию, специфическую для компилятора (assertlmpl()). Строковый аргумент этой функции представляет текст cond, имя файла и номер строки программы, в которой проверялось утверждение. (В нашем примере использован заполнитель ???, но на самом деле возвра


Комментарии закрыты.