Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в дельфи сделать такое [D5]


Виктор007 ©   (2007-10-30 22:36:00) 

Не могу найти как пользоваться макро определениями...

#if DBG
#define DPRINT DbgPrint
#else
#define DPRINT
#endif


DVM   (2007-10-30 23:46:00) [1]


> homm ©   (30.10.07 22:53) [7]
> > [5] Reindeer Moss Eater ©   (30.10.07 22:50)
>
> {$IFDEF DBG} — это и есть препроцессор,

Это не препроцессор. Компилятор в делфи однопроходный, а препроцессинг это еще один проход как минимум. Зато Делфи компилирует быстро.


homm   (2007-10-30 23:22:00) [2]

Можно еше в любой версии assert использовать


homm   (2007-10-30 23:18:00) [3]

> P.S. а в Delphi 2007 ничего нового по этому поводу не ввели?

Можно emptyLog объявить как inline.


Виктор007   (2007-10-30 23:17:00) [4]

> homm ©
Так быстро ответили что я не заметил некоторых ответов...

Я так и понял. Просто подумал что неплохо было бы чтобы в результирующий exe файл не компилировались отладочные сообщения и вызов функций
emptyLog(...);

Ведь дельфи в итоге сделает примерно так
asm
 mov eax, DPRINT
 call [eax]
end

пусть и emptylog ничего не сохраняет, но её вызов будет осуществлен.

> Вудзрш   (30.10.07 23:02) [12]
Ничего я не порчу, просто интересуюсь.

P.S. а в Delphi 2007 ничего нового по этому поводу не ввели?


homm   (2007-10-30 23:02:00) [5]

> [10] Виктор007   (30.10.07 22:59)
> Понятно, жаль.

Что тебе понятно? Что именно жаль? Смотрел ли ты в [6]? Чесал ли репу?


Вудзрш   (2007-10-30 23:02:00) [6]

уходи и не порти неше делфи своими сишными вредными привычками


Виктор007   (2007-10-30 22:59:00) [7]

Понятно, жаль. А можно ли настроить проект в дельфи, чтобы перед компиляцией вызывался свой препроцессор? Именно не батником компилировать, а нажаль в дельфе F9, она вызвала сначала препроцессор, а потом скомпилировала?


Reindeer Moss Eater   (2007-10-30 22:58:00) [8]

Я под препроцессором понимаю нечто, работающее с исходником до того, как он будет скормлен компилятору.


Reindeer Moss Eater   (2007-10-30 22:55:00) [9]

Это не препроцессор, это компилятор понимает директивы компилятора.


homm   (2007-10-30 22:53:00) [10]

> [5] Reindeer Moss Eater ©   (30.10.07 22:50)

{$IFDEF DBG} — это и есть препроцессор, только функцианал разлечается не в лучшую сторону по сравнению с сишным. Зато Дельфи умная :)


homm   (2007-10-30 22:52:00) [11]

type
 TLogFile = procedure (...);
var
DPRINT: TLogFile;

procedure emptyLog(...);
procedure LogFile(...);
……
{$IFDEF DBG}
DPRINT := LogFile;
{$ELSE}
DPRINT := emptyLog;
{$ENDIF}


Reindeer Moss Eater   (2007-10-30 22:50:00) [12]

Для этого нужен препроцессор, а его нету.


Виктор007   (2007-10-30 22:47:00) [13]

Не, про IFDEF я знаю. Меня интересует как можно переопределять.

Например в отладочной версии я везде где надо выводить сообщения вставляю такие конструкции:

 {$IFDEF DBG}
 LogFile('-= START PROGRAM: %s =-', [paramstr(0)]);
 {$ENDIF}

А хотелось бы описать макрос

#if DBG
#define DPRINT LogFile
#else
#define DPRINT
#endif

И потом в программе просто вставлять такие строки:
 DPRINT('-= START PROGRAM: %s =-', [paramstr(0)]);


homm   (2007-10-30 22:40:00) [14]

{IFDEF } + F1, дальше сам найдешь…


homm   (2007-10-30 22:40:00) [15]

> [1] homm ©   (30.10.07 22:40)

{$IFDEF DBG}


Reindeer Moss Eater   (2007-10-30 22:40:00) [16]

ищи под кнопкой F1


Наверх

Титульная страница Поиск, карта сайта Написать письмо