![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в дельфи сделать такое [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