Форум программистов, компьютерный форум CyberForum.ru

assertion, cassert - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
05.11.2011, 01:45     assertion, cassert #1
Подскажите пожалуйста о библиотеке cassert. В каких случаях она применяется, зачем нужна, где об этом можно подробно прочесть и посмотреть примеры? Заранее спасибо.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2011, 01:45     assertion, cassert
Посмотрите здесь:

C++ Assertion failed
C++ debug assertion failed
Debug assertion failed C++
Debug Assertion Failed C++
C++ Debug Assertion Failed
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
05.11.2011, 01:56     assertion, cassert #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
например Статическая отладка программ
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
05.11.2011, 01:57     assertion, cassert #3
Там определена функция assert().
C++
1
2
3
void assert( 
   int expression 
);
Evaluates an expression and, when the result is false, prints a diagnostic message and aborts the program.
Очень полезная функция при отладке программы.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
05.11.2011, 02:00     assertion, cassert #4
только это макрос
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
05.11.2011, 02:07     assertion, cassert #5
alex_x_x, я взял цитату непосредственно из MSDN. Макрос не может возвращать void.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
05.11.2011, 02:20     assertion, cassert #6
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __assert_impl (const char* file,
                    const char* func,
                    const int line,
                    const int expr,
                    const char* str_expr)
{
   if (!expr)
   {
       printf("assertion: %s - %s on %d [%s]", file, func, line, str_expr); 
       exit(-1);
   }
}
                    
 
#define assert(expr) __assert_impl(__FILE__, __FUNCTION__, __LINE__, (expr), #expr)
 
int main()
{
   assert(10<0);
   return 0;
}
Добавлено через 4 минуты
очень даже может, в некотором смысле
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
05.11.2011, 04:08     assertion, cassert #7
Исключения, ошибки, assertы... Я совсем запутался...
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 04:25     assertion, cassert #8
Цитата Сообщение от ValeryLaptev
Evaluates an expression and, when the result is false, prints a diagnostic message and aborts the program.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
#define NDEBUG
#include <cassert>
 
using namespace std;
 
int main()
{
    assert(cout << "assert ouput" << endl);
    cout << "ouput" << endl;
    return 0;
}
Код
[guest@localhost tests]$ .iso++ t.cpp -o t
[guest@localhost tests]$ ./t
ouput
[guest@localhost tests]$
это именно макрос, который не вычисляет переданное ему выражение, если определена NDEBUG
выражение должно находиться за пределами assert(), чтобы вместо простого отключения не пришлось переписывать
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
05.11.2011, 10:23     assertion, cassert #9
Цитата Сообщение от alex_x_x Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __assert_impl (const char* file,
                    const char* func,
                    const int line,
                    const int expr,
                    const char* str_expr)
{
   if (!expr)
   {
       printf("assertion: %s - %s on %d [%s]", file, func, line, str_expr); 
       exit(-1);
   }
}
                    
 
#define assert(expr) __assert_impl(__FILE__, __FUNCTION__, __LINE__, (expr), #expr)
 
int main()
{
   assert(10<0);
   return 0;
}
Добавлено через 4 минуты
очень даже может, в некотором смысле
Ну, то, что макрос может быть в конкретной реализации и определен - понятно. Это и я знаю...
А в MSDN описана функция.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 10:42     assertion, cassert #10
Цитата Сообщение от ValeryLaptev
А в MSDN описана функция.
msdn. assert
The assert macro is typically used to identify logic errors during program development
Цитата Сообщение от ValeryLaptev
Это и я знаю
assert() - это макрос по стандарту
C89(draft)
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
05.11.2011, 13:23     assertion, cassert #11
accept, что пардон-то пардон. Таким образом, приходим к выводу, что писатели из Микрософт вводят народ в заблуждение: прототип прописан от функции, а описывают макрос
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 17:06     assertion, cassert #12
C89(draft)
Код
4.2.1.1 The assert macro

Synopsis

         #include <assert.h>
         void assert(int expression);

...

Returns

   The assert macro returns no value.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
05.11.2011, 19:05     assertion, cassert #13
accept, ну опять же - практически никто в стандарт С не ходит, чтобы программировать на С++...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2011, 19:27     assertion, cassert
Еще ссылки по теме:

C++ Debug assertion failed
Debug assertion failed C++
Debug Assertion Failed! C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 19:27     assertion, cassert #14
assert() в C++ из стандарта C89 берётся (там идёт ссылка на него)
19.3

Добавлено через 5 минут
Цитата Сообщение от ValeryLaptev
А в MSDN описана функция.
а msdn мало относится к языку
достаточно прочитать описание fopen() в стандарте и на msdn
Yandex
Объявления
05.11.2011, 19:27     assertion, cassert
Ответ Создать тему
Опции темы

Текущее время: 03:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru