Небольшая полезная фича работающая только при дебаге (для самоконтроля от ошибок).
- если использовать стандартную библиотеку
#include <assert.h>
//...
void assert ( int expression );
- если при разработке используется такая среда разработки как Microsoft Visual C++,
тогда можно подключить специфичный заголовочный файл (additionally - msdn library)
#include <crtdbg.h>
//...
_ASSERT( booleanExpression );
Небольшой примерчик:
#include <stdio.h> /* printf */
#include <assert.h> /* assert */
void print_number(int* myInt) {
assert (myInt!=NULL);
printf ("%d\n",*myInt);
}
int main ()
{
int a=16;
int * b = NULL;
int * c = NULL;
b=&a;
print_number (b);
print_number (c);
return 0;
}
В этом примере при втором вызове метода print_number (c)
программа завершает свое
выполнение - срабатывает
assert()
, был отловлен "пустой" указатель.
Следующий пример аналогичен, отличие только в демонстрации использования второго
подхода (использование среды разработки
Microsoft Visual Studio)
#include <crtdbg.h>
#include <iostream>
void check( const int * pt )
{
std::cout << "check pointer" << std::endl;
_ASSERT( pt != NULL );
}
int main() {
int a = 16;
int * b = NULL;
int * c = NULL;
b = &a;
check( b );
check( c );
return 0;
}
В итоге во время дебага будет отловлен пустой указатель - компилятор выкинет
соответствующее сообщение - Debug Assertion Failed (см. рис.1).
|
рис.1 Debug Assertion Failed! |