Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
RAFA91
Заблокирован
1

Уровни отладки

14.06.2015, 16:08. Просмотров 1309. Ответов 55
Метки нет (Все метки)

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

Подскажите пожалуйста почему при выполнении строки
C++
1
#if DEBUGLEVEL < HIGH
я получаю на экран сообщение от

C++
1
2
3
#else
 
#define PIMA(x) cout << "\n*** PIMA(x) "<< #x << " = " << x <<"\n";
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
31
32
33
34
35
36
37
#include<conio.h>
 
#include <iostream>
 
using namespace std;
 
 
enum LEVEL{NONE, LOW, MEDIUM, HIGH};
 
 
#define DEBUGLEVEL NONE
 
#if DEBUGLEVEL < HIGH
 
#define PIMA(x)
 
#else
 
#define PIMA(x) cout << "\n*** PIMA(x) "<< #x << " = " << x <<"\n"; 
 
#endif
 
 
int main()
 
{
    int a = 0, *p = &a;
    
    PIMA(a);
 
    cout<<"\na = "<<a<<"\n";
 
    getch();
    
        return 0;
 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2015, 16:08
Ответы с готовыми решениями:

Уровни знаний C++
Здравствуйте уважаемые пользователи Еще не начав изучать с++, хотел бы спросить, на какие уровни...

Уровни косвенного обращения
День добрый, что такое уровни косвенного обращения, как и для чего они используются? Заранее...

Уровни доступа в производных классах
В одном учебнике прочел вот такую фразу: УРОВЕНЬ ДОСТУПА К ЧЛЕНАМ БАЗОВОГО КЛАССА МОЖЕТ БЫТЬ...

WFP. Не видны уровни для callout-а
Пытаюсь зарегистрировать свой callout на уровне дейтаграмм, а там FWPM_LAYER_DATAGRAM_DATA_V4 не...

Организация наследования классов. Уровни доступа
Дана матрица размера M × N и целое число K (1 ≤ K ≤ N). После столбца матрицы с номером K вставить...

55
Velesthau
524 / 427 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
14.06.2015, 16:25 2
Цитата Сообщение от RAFA91 Посмотреть сообщение
enum LEVEL{NONE, LOW, MEDIUM, HIGH};
Этим занимается компилятор уже после препроцессора.
Цитата Сообщение от RAFA91 Посмотреть сообщение
#if DEBUGLEVEL < HIGH
На данном этапе препроцессор не знает, что такое HIGH, потому что это работа компилятора, который запустится после.
А так как HIGH не определен, то будет 0 и условие уйдет на #else, так как 0 не меньше 0.

Добавлено через 5 минут
Цитата Сообщение от RAFA91 Посмотреть сообщение
#define DEBUGLEVEL NONE
К слову, NONE здесь тоже не определен.
0
RAFA91
Заблокирован
14.06.2015, 16:38  [ТС] 3
я делал по примеру
0
Миниатюры
Уровни отладки  
Velesthau
524 / 427 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
14.06.2015, 17:38 4
Цитата Сообщение от RAFA91 Посмотреть сообщение
я делал по примеру
Ну ок. Значит, пример с ошибкой.
0
14.06.2015, 17:38
RAFA91
Заблокирован
14.06.2015, 18:10  [ТС] 5
Я так не думаю.

В данном случае выражение от
C++
1
cout << "\n*** PIMA(x) "<< #x << " = " << x <<"\n";
не должно всплывать так как

C++
1
#define  Sasa 1
C++
1
#if (Sasa < HIGH)
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
31
32
33
34
35
36
37
38
39
40
41
#include<conio.h>
 
#include <iostream>
 
using namespace std;
 
 
#define  Sasa 1
 
 
enum LEVEL{NONE, LOW, MEDIUM, HIGH};
 
 
 
#if (Sasa < HIGH)
 
#define PIMA(x)
 
#else
 
#define PIMA(x) cout << "\n*** PIMA(x) "<< #x << " = " << x <<"\n";
 
#endif
 
 
 
int main()
 
{        
 
    int a = 0, *p = &a;
     
    PIMA(a);
 
    cout<<"\na = "<<a<<"\n";
 
    getch();
    
    return 0;
 
}
0
Миниатюры
Уровни отладки  
Velesthau
524 / 427 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
14.06.2015, 18:20 6
Цитата Сообщение от RAFA91 Посмотреть сообщение
В данном случае выражение от
Код C++
1
cout << "\n*** PIMA(x) "<< #x << " = " << x <<"\n";
не должно всплывать так как
Код C++
1
#define *Sasa 1
Код C++
1
#if (Sasa < HIGH)
Должно. Так как 1<0 идет на else. HIGH не определен для препроцессора и опять же 0. Поэтому и печатается.

Добавлено через 2 минуты
Цитата Сообщение от RAFA91 Посмотреть сообщение
Я так не думаю.
Расскажи компилятору и препроцессору
0
RAFA91
Заблокирован
14.06.2015, 18:23  [ТС] 7
помогите написать правильно , если не сложно.

кстати HIGH равно 3 а не 0 как вы думаете ( 1 < 3 )

так что else не должен работать.

Цитата Сообщение от Velesthau Посмотреть сообщение
Расскажи компилятору и препроцессору

хорошо
0
Velesthau
524 / 427 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
14.06.2015, 18:26 8
Цитата Сообщение от RAFA91 Посмотреть сообщение
кстати HIGH равно 3
Блин, я уже десятый раз пишу. HIGH равно 3 для компилятора. #if - это не компилятор, а препроцессор. Препроцессор работает до компилятора и его выхлоп уже идет компилятору. И для препроцессора неопределенный идентификатор - это 0. Поэтому HIGH - это 0. Потому что еще никаких enum не обработано, потому что это не задача препроцессора. Он про enum'ы твои ничего не знает. И HIGH для препроцессора не существует. Для препроцессора, грубо, все начинается с решетки (#define, #if), все, что не решетка - не существует. Поэтому нет никаких у него HIGH, LOW и бла-бла-бла. Почитай про препроцессор и компилятор, вкури, о чем я пишу.

Добавлено через 21 секунду
Цитата Сообщение от RAFA91 Посмотреть сообщение
так что else не должен работать.
Должен. И работает.
1
RAFA91
Заблокирован
14.06.2015, 18:29  [ТС] 9
ну так помоги исправить ошибку если ты выкупаешь в этом .
0
Velesthau
524 / 427 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
14.06.2015, 18:33 10
Цитата Сообщение от RAFA91 Посмотреть сообщение
ну так помоги исправить ошибку если ты выкупаешь в этом .
Так просто сделай
C++
1
2
3
#define NONE 0
#define LOW 1
...
или
C++
1
2
3
4
#define  NONE 0
 #define  LOW NONE+1
 #define  MEDIUM NONE+2
...
кому как нравится. Вместо enum. Потом выстави DEBUGLEVEL и играйся на здоровье.
0
RAFA91
Заблокирован
14.06.2015, 18:38  [ТС] 11
угадай что должно выполсти на экран ? я получаю 3 , а не 0

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<conio.h>
 
#include <iostream>
 
using namespace std;
 
 
#define  Sasa HIGH // ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,????????
 
 
enum LEVEL{NONE, LOW, MEDIUM, HIGH};
 
 
int main()
 
{        
    cout << "******* " <<Sasa <<"\n";
 
    getch();
    
    return 0;
 
}
0
Velesthau
524 / 427 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
14.06.2015, 18:42 12
Цитата Сообщение от RAFA91 Посмотреть сообщение
угадай что должно выполсти на экран ?
Должно вывести 3, потому что на стадии компиляции значение HIGH компилятору уже известно.
0
RAFA91
Заблокирован
14.06.2015, 18:49  [ТС] 13
ты уверен что в этом профи ?

cделал все как посоветовал

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
#include<conio.h>
 
#include <iostream>
 
using namespace std;
 
 
enum LEVEL{NONE, LOW, MEDIUM, HIGH};
 
 
#define  Sasa HIGH // смотри
 
#define   HIGH 8 // смотри
 
 
int main()
 
{        
    cout << "******* " <<Sasa <<" "<< HIGH <<"\n";
  
    getch();
    
    return 0;
 
}
а теперь смотри результат

http://ideone.com/SLe14S
0
Velesthau
524 / 427 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
14.06.2015, 18:55 14
Что не так с результатом?
Может, такой пример поможет тебе понять:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
const int HIGH = 10;
 
#define  Sasa HIGH
 
#if Sasa == 10
const char* DEBUGLEVEL = "HIGH";
#else
const char* DEBUGLEVEL = "NONE";
#endif
 
int main()
 
{        
    cout << "Sasa " <<Sasa <<"  DEBUGLEVEL: "<<DEBUGLEVEL<<"\n";
    return 0;
}
Ты страдаешь фигней сейчас, пытаясь доказать, что компилятор не прав, а автор книги не ошибся.
0
ValeryS
Модератор
7528 / 5703 / 738
Регистрация: 14.02.2011
Сообщений: 19,523
Завершенные тесты: 1
14.06.2015, 18:59 15
Цитата Сообщение от RAFA91 Посмотреть сообщение
я получаю 3 , а не 0
а сколько ты хотел получить?
а теперь напиши так
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
#include<conio.h>
 
#include <iostream>
 
using namespace std;
 
#ifdef HIGH
#define  Sasa HIGH // ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,????????
#else
 #define  Sasa LOW
#endif
 
enum LEVEL{NONE, LOW, MEDIUM, HIGH};
 
 
int main()
 
{        
    cout << "******* " <<Sasa <<"\n";
 
    getch();
    
    return 0;
 
}
сколько получишь?
Цитата Сообщение от RAFA91 Посмотреть сообщение
cделал все как посоветовал
серьезно?
Цитата Сообщение от RAFA91 Посмотреть сообщение
enum LEVEL{NONE, LOW, MEDIUM, HIGH};
Цитата Сообщение от Velesthau Посмотреть сообщение
#define *NONE 0
*#define *LOW NONE+1
*#define *MEDIUM NONE+2
найдите 10 отличий
0
Velesthau
524 / 427 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
14.06.2015, 19:00 16
Твой же пример, чуть измененный для лучшего понимания:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
 
 
enum LEVEL{NONE, LOW, MEDIUM, HIGH};
 
 
#define  Sasa HIGH
 
int main()
 
{        
    cout << "******* " <<Sasa ;
    #define   HIGH 8
    cout<<" "<< Sasa<<"\n";
 
    return 0;
}
Sasa - это HIGH, он еще не определен препроцессором, поэтому с ним разберется компилятор подставив из enum. Второй вывод HIGH уже известен препроцессору, поэтому до компилятора не дойдет.
К сожалению, у меня нет компилятора под рукой, чтобы вывод препроцессора сюда написать, можешь это сам сделать. Но работа, думю, примерно такая.
0
Kastaneda
Jesus loves me
Эксперт С++
5037 / 3056 / 349
Регистрация: 12.12.2009
Сообщений: 7,724
Записей в блоге: 2
Завершенные тесты: 1
14.06.2015, 19:08 17
Цитата Сообщение от Velesthau Посмотреть сообщение
Sasa - это HIGH, он еще не определен препроцессором, поэтому с ним разберется компилятор подставив из enum
Для пущего понимания вот код после препроцессора (в gcc ключ -E)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using namespace std;
 
 
enum LEVEL{NONE, LOW, MEDIUM, HIGH};
 
 
 
 
int main()
 
{
    cout << "******* " <<HIGH ;
 
    cout<<" "<< 8<<"\n";
 
    return 0;
}
1
ValeryS
Модератор
7528 / 5703 / 738
Регистрация: 14.02.2011
Сообщений: 19,523
Завершенные тесты: 1
14.06.2015, 19:11 18
Цитата Сообщение от Kastaneda Посмотреть сообщение
он его не откуда не поставит, он тупой.
Кито?
Цитата Сообщение от Kastaneda Посмотреть сообщение
Он тупо вместо Sasa подставит HIGH, а там уже будь что будет.
это ты про препроцессор?
а Velesthau то, про компилятор
Цитата Сообщение от Velesthau Посмотреть сообщение
поэтому с ним разберется компилятор подставив из enum.
0
Kastaneda
14.06.2015, 19:13
  #19

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
Кито?
я сообщение отредактировал, первый раз неправильно суть посты выше понял.

0
ValeryS
14.06.2015, 19:14     Уровни отладки
  #20

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
я сообщение отредактировал,
опять я поторопился:cry:

0
14.06.2015, 19:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2015, 19:14
Привет! Вот еще темы с ответами:

Получить цвет каждого пикселя изображения, разбив на уровни RGB
Нужно получить цвет каждого пикселя изображения, разбив на уровни RGB. Как реализовать подобное?

Остановка отладки
Очень часто при остановке отладки в VS 2017 появляется окно &quot;Выполняется, но еще не закончена,...

Режим отладки
Добрый вечер, суть проблемы в том, что при запуске программы в режиме отладки программа работает...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru