#if
| |
Hagrael | Дата: Понедельник, 10 Января 2011, 08:09 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Вот у меня код: Code #define PROGRAM_TYPE NOT_DEGRESS
#if PROGRAM_TYPE == DEGRESS
#include <iostream> #include <conio.h> using namespace std; int main() { cout << "DEGREES"; _getch(); return 0; }
#endif
Однако выводится DEGREES. Почему? о_О
|
|
| |
WereWolf | Дата: Понедельник, 10 Января 2011, 09:36 | Сообщение # 2 |
частый гость
Сейчас нет на сайте
| cout << "DEGREES"; Вроде как вывод срабатывает
В мире много глюков - и с ними надо жить!!!
|
|
| |
Hagrael | Дата: Понедельник, 10 Января 2011, 09:41 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| WereWolf, так это по идее к компилятору попасть не должно было, т. к. PROGRAM_TYPE = NOT_DEGRESS, а не DEGREES.
|
|
| |
kiselev | Дата: Понедельник, 10 Января 2011, 09:42 | Сообщение # 4 |
участник
Сейчас нет на сайте
| http://msdn.microsoft.com/en-us/library/078sfkak%28v=vs.71%29.aspx
|
|
| |
Riketta | Дата: Понедельник, 10 Января 2011, 09:43 | Сообщение # 5 |
Strategist
Сейчас нет на сайте
| Hagrael, Это текст, обычный текст, т.к. он в кавычках, попробуй без кавычек... Вывод будет срабатывать и с Not и без, т.к. ты выводишь обычный текст.
Fougerite - Rust Server OpenSource API TerraDev - Terraria OpenSource Hack
|
|
| |
Hagrael | Дата: Понедельник, 10 Января 2011, 09:54 | Сообщение # 6 |
почетный гость
Сейчас нет на сайте
| _getch тут вообще не при чём. Проблема вот в чём - после просмотра файла препроцессором долен остаться пустой файл. Я же поставил условие: #if PROGRAM_TYPE == ... А оно не срабатывает. В компилятор всё равно попадает всё, что написано в теле условия.
|
|
| |
Farcuat | Дата: Понедельник, 10 Января 2011, 09:58 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| У тебя не определены DEGRESS и NOT_DEGRESS. добавь две строки в самом начале Code #define DEGRESS 100 #define NOT_DEGRESS 101
и будет работать. Вернее компилятор будет ругаться на отсутсвие main().
|
|
| |
froex | Дата: Понедельник, 10 Января 2011, 10:05 | Сообщение # 8 |
Руководитель Froexilize team
Сейчас нет на сайте
| каждый #if-блок желательно закрывать парным #endif
Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее. Алгоритмы, программирование, оптимизация, тестирование, ведение проектов. Ищу художника, дизайнера, тестера, программистов С и С++ Обучаю процессам разработки и программированию.
|
|
| |
Hagrael | Дата: Понедельник, 10 Января 2011, 10:34 | Сообщение # 9 |
почетный гость
Сейчас нет на сайте
| froex, проскроллите код, у меня есть парный #endif =) Farcuat, зачем создавать лишние макросы? Я хочу запихать в PROGRAM_TYPE строчку, а не приравнять его к DEGREES или NOT_DEGRESS. Разве не строчка там приравнивается? о_О В общем, можете написать рабочий код, который в зависимости от макроса PROGRAM_TYPE пишет различный код? Буду премного благодарен.
|
|
| |
Farcuat | Дата: Понедельник, 10 Января 2011, 11:38 | Сообщение # 10 |
частый гость
Сейчас нет на сайте
| Чтобы записать строчку тебе следовало добавить ковычки, вот так Code #define PROGRAM_TYPE "NOT_DEGRESS"
В таком варианте можешь использовать PROGRAM_TYPE как строчку. В #if сравнивай только числа. Вариант с числами выглядит так. Однако я не советую тебе так писать код на Си. Директива #if чаще всего используется внутри библиотечных файлов типа "conio.h", чтобы избежать их повторного включения в программу. Если нужно чтобы программа выполняла разные действия делай условия в программе, а не с помощью директив препроцессора. Не пытайся уменьшать размер экзешника таким образом. Это же Си, ты не для браузера программируешь, загрузка кода по сети каждый раз не требуется.
|
|
| |
ezhickovich | Дата: Понедельник, 10 Января 2011, 12:36 | Сообщение # 11 |
[Великий и могучий хозяинъ]
Сейчас нет на сайте
| Farcuat, А не лучше ли так? Code #define NOT_DEGRESS 100 #define DEGRESS 101 #define PROGRAM_TYPE NOT_DEGRESS
#include <iostream.h> #include <conio.h> using namespace std; int main () { #if PROGRAM_TYPE == DEGRESS cout << "\nDEGREES "; cout << PROGRAM_TYPE; #else cout << "\nNOT_DEGREES "; cout << PROGRAM_TYPE; #endif getch (); return 0; }
Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
Сообщение отредактировал ezhickovich - Понедельник, 10 Января 2011, 12:37 |
|
| |
Hagrael | Дата: Понедельник, 10 Января 2011, 13:11 | Сообщение # 12 |
почетный гость
Сейчас нет на сайте
| Всем спасибо!
|
|
| |
Farcuat | Дата: Понедельник, 10 Января 2011, 13:16 | Сообщение # 13 |
частый гость
Сейчас нет на сайте
| ezhickovich, да лучше.
|
|
| |
Hagrael | Дата: Понедельник, 10 Января 2011, 13:44 | Сообщение # 14 |
почетный гость
Сейчас нет на сайте
| Ещё 2 вопроса появились - каким образом работает такой вызов функции? Code static_cast<int>(var)
То есть каким макаром туда int в угловых скобках попадает? о_О И ещё - в char может быть 1 байт, _getch возвращает char, и когда пишешь cout << _getch(), то выводится буква. Выходит, на одну букву расходуется 8 бит или как?
|
|
| |
ezhickovich | Дата: Понедельник, 10 Января 2011, 14:24 | Сообщение # 15 |
[Великий и могучий хозяинъ]
Сейчас нет на сайте
| Quote (Hagrael) Выходит, на одну букву расходуется 8 бит или как? Да, представь себе... Quote (Hagrael) То есть каким макаром туда int в угловых скобках попадает? о_О Ээээ... Вообще не понял вопрос... Открой уже гугл... Клик
Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
|
|
| |
Hagrael | Дата: Понедельник, 10 Января 2011, 16:16 | Сообщение # 16 |
почетный гость
Сейчас нет на сайте
| ezhickovich, вот именно потому, что вы не поняли вопроса, вы и отправили меня на гугл =) Дело в том, что я не понимаю, каким образом <int> попадает в функцию? То есть я знаю такую операцию: Code class my_type { operator<int a> { cout << a; } }
И то с <...> не проверял, так что не знаю, будет ли работать, но загвоздка ещё вот в чём - static_cast ведь не объект, так что к нему по идее такое нельзя прицепить. Или я ошибаюсь?
|
|
| |
ezhickovich | Дата: Понедельник, 10 Января 2011, 16:24 | Сообщение # 17 |
[Великий и могучий хозяинъ]
Сейчас нет на сайте
| Это функция шаблон...
Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
Сообщение отредактировал ezhickovich - Понедельник, 10 Января 2011, 16:24 |
|
| |
Hagrael | Дата: Понедельник, 10 Января 2011, 17:39 | Сообщение # 18 |
почетный гость
Сейчас нет на сайте
| ezhickovich, понятно, спасибо. Ну в общем, пока на этом зацикливаться думаю не стоит. Добавлено (10.01.2011, 17:36) --------------------------------------------- А вот ещё вопрос - в каком порядке инициализируются функции? То есть у меня 3 функции, first, main, second (расположены в том же порядке, в котором написаны), как действует программа? То есть она ведь вначале инициализирует все функции, а лишь после выполняет функцию main или нет? Если да, то зачем прототипы? Добавлено (10.01.2011, 17:39) --------------------------------------------- И зачем юзать статические переменные, если они всегда будут в памяти?
|
|
| |
Kornival | Дата: Понедельник, 10 Января 2011, 17:49 | Сообщение # 19 |
The Witcher
Сейчас нет на сайте
| Hagrael, функции инициализируются в порядке расположения в коде. Quote (Hagrael) Если да, то зачем прототипы? Вот когда придется разбивать код и держать его в нескольких файлах, тогда поймешь Quote (Hagrael) И зачем юзать статические переменные, если они всегда будут в памяти? Я использовал статические переменные в качестве счетчиков. Если выбирать между глобальными и статическими переменными, я думаю выбор очевиден.
Сообщение отредактировал Kornival - Понедельник, 10 Января 2011, 17:51 |
|
| |
Hagrael | Дата: Понедельник, 10 Января 2011, 18:06 | Сообщение # 20 |
почетный гость
Сейчас нет на сайте
| Kornival, понял =) Что у меня не так? Компилятор выдаёт ошибку: Code int initGame(bool map[]); int main() { return 0; bool map[20][15]; initGame(map); } int initGame(bool map[15][20]) { for (int i=0; i<20; i++) { for (int j=0; j<15; j++) { map[i][j]=false; } } map[0][0]=true; return 0; }
Вот ошибка: \Code Blocks\game\main.cpp||In function `int main()':| \Code Blocks\game\main.cpp|14|error: cannot convert `bool (*)[15]' to `bool*' for argument `1' to `int initGame(bool*)'
|
|
| |
|