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

Деректива assert - C++

Восстановить пароль Регистрация
 
helloy
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 46
16.11.2013, 02:36     Деректива assert #1
Как правильно?

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <assert.h>
#define NDEBUG assert(n == 0);
 
 
int main() {
    int n=0;
    NDEBUG
    std::cout<<n;
return 0;
 
}
Миниатюры
Деректива assert  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 928
Завершенные тесты: 1
16.11.2013, 02:42     Деректива assert #2
C++
1
2
3
4
5
6
7
8
9
10
#include <cassert>
#include <iostream>
 
int main()
{
    assert(false); //false == 0
    std::cout << "Hello world!" << std::endl;
 
    return 0; 
}
Ваирант 1 (DEBUG)

(LINUX) g++ -DDEBUG main.cpp && ./a.out
(MSVC) project->build debug

Вариант 2 (NDEBUG)

(LINUX) g++ -DNDEBUG main.cpp && ./a.out
(MSVC) project->build release
helloy
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 46
16.11.2013, 05:51  [ТС]     Деректива assert #3
Цитата Сообщение от stima Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
#include <cassert>
#include <iostream>
 
int main()
{
    assert(false); //false == 0
    std::cout << "Hello world!" << std::endl;
 
    return 0; 
}
Ваирант 1 (DEBUG)

(LINUX) g++ -DDEBUG main.cpp && ./a.out
(MSVC) project->build debug

Вариант 2 (NDEBUG)

(LINUX) g++ -DNDEBUG main.cpp && ./a.out
(MSVC) project->build release
понял преимущества особенно для консоли(хоть и пишу в VS).
Стоит ли это использовать часто? или не стоит злоупотреблять?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
16.11.2013, 08:39     Деректива assert #4
Откуда задание? Еще не видел, чтобы assert обзывали директивой.
Цитата Сообщение от helloy Посмотреть сообщение
Стоит ли это использовать часто? или не стоит злоупотреблять?
Везде, где нужно выразить предположение программиста о некоторых условиях. Иначе говоря, assert фиксирует условия, которые при корректном коде должны выполняться всегда.
l2ded
 Аватар для l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
16.11.2013, 13:18     Деректива assert #5
Цитата Сообщение от 0x10 Посмотреть сообщение
Откуда задание? Еще не видел, чтобы assert обзывали директивой.
Эккель. Философия C++. Введение в стандартный C++. Питер.2004
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
16.11.2013, 13:42     Деректива assert #6
C++
1
#define NDEBUG // дальше можно ничего не писать
означает, что все assert-ы будут как будто удалены. никаких сообщений об ошибках выводится не будет.
используется, как уже сказали, когда вы точно знаете, чему должна быть равна данная переменная, и если это не так - фэйл. например, проверяете, что знаменатель дроби не равен 0.
ничего плохого в нем нет, кроме лишних проверок, которые он выполняет, но когда вы дебажите программу это абсолютно не важно. читал где-то, что сейчас не модно, ибо есть средства лучше.
Yandex
Объявления
16.11.2013, 13:42     Деректива assert
Ответ Создать тему
Опции темы

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