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

NDEBUG и DEBUG - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Исходник чата http://www.cyberforum.ru/cpp-beginners/thread946049.html
Всем приветик!:) Хочу задать вам один глупый вопросик...:) Есть у кого нибудь исходник какого нибудь чата?:) Что то искала, ничего подходящего не нашла...:( В общем, сейчас попробую описать поподробней, как я вижу то, что ищу:) Есть программка. Такая же программка есть ещё у нескольких человек. Я пишу что нибудь и нажимаю кнопку "Отправить" и моё сообщение появляется у всех людей, у кого...
C++ c++ box2d и opencv Работаю на Xcode с openframework, конкретнее с библиотеками box2d и opencv. Задача захватывать контур с помощью opencv и делать его физическим объектом. Добился того что могу получать точки определенного контура так: ofPoint contours; vector <ofPoint> simpleCountour; for(int i = 0; i < contourFinder.nBlobs; i++) { simpleCountour = contourFinder.blobs.at(i).pts; contours =... http://www.cyberforum.ru/cpp-beginners/thread946046.html
Разработка приложения для symbian на языке c++ C++
Разработка приложения для symbian на языке c++. Приложение-записная книга с простейшим интерфейсом.Проблема заключается в следующем - если в записи встретится номер телефона, то его можно выделить ,передать в строку набора номера и позвонить. Нужен код именно последней функции.
C++ Алгоритм шифрования из exe файла
Hola amigos! :) На C++ к слову я мало что понимаю и столкнулся с некой необходимостью получить алгоритм шифрования обычного CD-ключа из exe-файла. Пишу на C# простой установщик игры со всеми патчами и дополнениями, но помимо ключей реестра необходимо еще и позволить пользователю вводить свой CD-ключ, а записывается он в реестр пройдя некий алгоритм шифрования (банальный hex-bin не подойдет)....
C++ Изменение цвета символа в консоле http://www.cyberforum.ru/cpp-beginners/thread945979.html
Добрый день. Интересует, возможно ли сменить цвет отдельного символа в виндовской консоли? Либо возможно ли использовать в виндовской консоли псевдографику? В частности интересует, возможно ли задать цвет символа хотя бы из 256-цветной палитры? (т.е. textcolor(); не подойдет :D). Если в винде это сделать невозможно, то может подскажите как это делается в досе (или на крайний случай в linux) ?...
C++ Указатель на статический массив как параметр шаблона Добрый день. Необходимо параметр шаблона сделать указателем и передавать в него указатель на статический массив: template<size_t *cm> struct str { }; int main() { constexpr size_t cm = {0,1,2}; подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
30.08.2013, 20:41     NDEBUG и DEBUG
Эти макрос NDEBUG обычно определяется системой сборки (можно и определить вручную). Если он определён к моменту, когда подключается заголовочный файл assert.h (соответственно, cassert для C++), то макрос assert не генерирует кода.

Также ты можешь использовать этот макрос, к примеру, для написания собственных макросов:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef DEBUG_H
#define DEBUG_H
 
#ifdef NDEBUG
 
#define DEBUG(FMT, ...) ((void) 0)
#define ASSERT(TEST, FMT, ...) ((void) 0)
 
#else
 
#include <stdio.h>
#include <stdlib.h>
 
#define DEBUG(FMT, ...)                         \
    fprintf(stderr, "[DEBUG] " FMT "\n", ##__VA_ARGS__)
 
#define ASSERT(TEST, FMT, ...)                              \
    do                                                      \
    {                                                       \
        if(!(TEST))                                         \
        {                                                   \
            DEBUG("Assertion \"" #TEST "\" failed: "        \
                  FMT, ##__VA_ARGS__);                      \
            abort();                                        \
        }                                                   \
    } while(0)
 
#endif  /* NDEBUG */
 
#endif  /* DEBUG_H */
Также можно его использовать для включения/выключения частей кода в зависимости от режима сборки (отладочная/релизная):
C
1
2
3
4
5
puts("This line will always be displayed.");
 
#ifndef NDEBUG
puts("This line will not be displayed if NDEBUG is defined.");
#endif
если я понял правильно то определение
C
1
#define NDEBUG
должно выключить:
C
1
assert(x<=10);//вызовет функцию abort() так как x>10;
Во-первых, это определение должно быть раньше подключения cassert. Во-вторых, как уже сказали, это дело лучше доверить системе сборки/IDE.
 
Текущее время: 10:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru