Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2015, 14:45   #1
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию Препроцессор

Всем доброго дня !

Подскажите пожалуйста что неправильно в этой конструкции ?
Код:
#if (DEBUG == 1)
 
#define ASSERT(x) \
                     if(!(x)) \
  \
{ \
                     cout << "\n*** Error "<< #x << "\n"; \
}
 
#else 
 
#if (DEBUG == 2)
 
#define ASSERT(x) \
 
\                      
                     if(!(x)) \
  \
{ \
                     cout << "\n*** Error "<< #x << "\n"; \
                                                          \
                     cout << "\n"<< __FILE__ << "\n";     \
                                                          \
                     cout << "\n"<< __LINE__ << "\n";     \
}
 
#else
 
#define ASSERT(x) 
 
#endif
полный код

Код:
#include<iostream>
#include<conio.h>
 
using namespace std;
 
 
// #define DEBUG 1
 
// #define DEBUG 2
 
 
#if (DEBUG == 1)
 
#define ASSERT(x) \
                     if(!(x)) \
  \
{ \
                     cout << "\n*** Error "<< #x << "\n"; \
}
 
#else 
 
#if (DEBUG == 2)
 
#define ASSERT(x) \
 
\                      
                     if(!(x)) \
  \
{ \
                     cout << "\n*** Error "<< #x << "\n"; \
                                                          \
                     cout << "\n"<< __FILE__ << "\n";     \
                                                          \
                     cout << "\n"<< __LINE__ << "\n";     \
}
 
#else
 
#define ASSERT(x) 
 
#endif
 
 
                     
int main()
 
{
    int x = 100;
 
    ASSERT(x == 10);
 
    cout << "\n*** "<< x << "\n"; 
 
    getch();
 
    return 0;
}
RAFA91 вне форума Ответить с цитированием
Старый 26.06.2015, 14:47   #2
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

необходимо при выполнении
Код:
#if (DEBUG == 1)
выполнять
Код:
cout << "\n*** Error "<< #x << "\n";
а при
Код:
#if (DEBUG == 2)
Код:
cout << "\n*** Error "<< #x << "\n";
                                                          
                     cout << "\n"<< __FILE__ << "\n";    
                                                          
                     cout << "\n"<< __LINE__ << "\n";

Последний раз редактировалось RAFA91; 26.06.2015 в 14:50.
RAFA91 вне форума Ответить с цитированием
Старый 26.06.2015, 17:14   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

#else
#if

заменить на
#elif
waleri вне форума Ответить с цитированием
Старый 26.06.2015, 19:42   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
#define ASSERT(x) \
========= дырка =============== 
\                      
                     if(!(x)) \
  \
{ \
                     cout << "\n*** Error "<< #x << "\n"; \
                                                          \
                     cout << "\n"<< __FILE__ << "\n";     \
                                                          \
                     cout << "\n"<< __LINE__ << "\n";     \
}
вот вам и вышло боком ваша дураццкая манера
писать в ужассном стиле.

код пишите по нормальному,
и не будет у вас таких проблем.
_Bers вне форума Ответить с цитированием
Старый 26.06.2015, 21:52   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

И вообще лучше делать inline функции вместо макросов.
waleri вне форума Ответить с цитированием
Старый 27.06.2015, 12:50   #6
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
[CODE]

вот вам и вышло боком ваша дураццкая манера
писать в ужассном стиле.

код пишите по нормальному,
и не будет у вас таких проблем.
а что не так то ?

я всегда оставляю пустую строку м-ду строками кода.

waleri спасибо. нужно было просто добавить еще один #endif

как я понял сочетание #if #else должно заканчиваться #endif

это типо вместо фигурных скобок.

напоминает Бейсик )))

Последний раз редактировалось RAFA91; 27.06.2015 в 12:57.
RAFA91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плагин Emmet или препроцессор Slim? Bender1000 HTML и CSS 1 26.03.2015 23:08
Препроцессор. Неоюходимо разобраться RIKISHI007 Общие вопросы C/C++ 2 06.08.2013 05:02
Препроцессор. Расшифровка Sna1L Общие вопросы C/C++ 2 12.03.2012 12:11
Препроцессор Delphi Warn Общие вопросы Delphi 3 19.12.2011 20:46
Препроцессор: определение длины строки Пепел Феникса Общие вопросы C/C++ 11 10.02.2011 21:20