FreeBasic
Главная
Вход
Регистрация
Суббота, 18.08.2018, 23:40Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Вопросы по языку FreeBasic » Подскажите по директиве #define
Подскажите по директиве #define
salexeiyДата: Понедельник, 25.12.2017, 11:19 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 60
Репутация: 2
Статус: Offline
То, что эта директива делает, я понял, но что она делает без второго параметра? В справке только это написано:
Цитата
#define позволяет объявить текстовые макрокоманды препроцессора. После того, как компилятор встретил #define, он начнет заменять дальнейшие вхождения identifier на body. body может быть пустым.

Так вот, когда body пуст, что происходит? На вопрос навёл исходник с форума фрибейсика по отрисовке сглаженных окружностей. Там есть такая строчка:

Код
#Define BUGGY_GFX_LIB

А дальше, в коде, встречается вот это:

Код
#IfDef BUGGY_GFX_LIB
    Line(x+px, y+py)-(x+px,y+py),RGBA(r,g,b,a*(1-d)),BF
#EndIf
#IfnDef BUGGY_GFX_LIB
    Pset(x+px, y+py),RGBA(r,g,b,a*(1-d))
#EndIf

Что с чем сравнивается - не пойму.
 
haavДата: Понедельник, 25.12.2017, 12:53 | Сообщение # 2
Генерал-полковник
Группа: Администраторы
Сообщений: 855
Репутация: 34
Статус: Offline
Цитата salexeiy ()
Так вот, когда body пуст, что происходит?


Просто объявление, что-то типа флага для препроцессора. Смысл в том, что если компилятор встретит данную директиву в условном макросе , например #ifdef , то строчки между #ifdef-#endif будут включены в исходник.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
salexeiyДата: Понедельник, 25.12.2017, 14:09 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 60
Репутация: 2
Статус: Offline
Наверно не так спросил, просто не знаю, как это сформулировать.

Про условия в макросах я тоже понял, но не пойму... Да как сказать то это?!

Допустим, мы написали вот такое: #define TEST_DEF Т.е. мы говорим препроцессору, что мы объявили пустой макрос TEST_DEF, и если в коде встретиться это определение, то делать что либо или не делать. Это как бы равносильно тому, что мы определили переменную test_def=0 (допустим) и в тексте программы проверяем условие, равна ли эта переменная нулю или нет. Я правильно понял?
 
VitaminДата: Понедельник, 25.12.2017, 15:56 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 14
Репутация: 3
Статус: Offline
salexeiy
Если переменная определена, то она просто существует, что и показывает в дальнейшем директива "ifdef"
Можно применять "#Define" еще и так:
Код
#Define Pauza(Sek) Sleep Sek##000' Пауза(сек) пауза задаётся целыми секундами
#Define In Integer

Dim As In x = 3 ' переменная типа Integer
?x

Pauza(5) ' пауза 5 сек.
 
Форум » Freebasic » Вопросы по языку FreeBasic » Подскажите по директиве #define
  • Страница 1 из 1
  • 1
Поиск: