Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.25;
Скачать: CL | DM;

Вниз

Как в дельфи сделать такое   Найти похожие ветки 

 
Виктор007   (2007-10-30 22:36) [0]

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

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


 
homm ©   (2007-10-30 22:40) [1]

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


 
homm ©   (2007-10-30 22:40) [2]

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

{$IFDEF DBG}


 
Reindeer Moss Eater ©   (2007-10-30 22:40) [3]

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


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

Не, про 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)]);


 
Reindeer Moss Eater ©   (2007-10-30 22:50) [5]

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


 
homm ©   (2007-10-30 22:52) [6]

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

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


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

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

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


 
Reindeer Moss Eater ©   (2007-10-30 22:55) [8]

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


 
Reindeer Moss Eater ©   (2007-10-30 22:58) [9]

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


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

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


 
homm ©   (2007-10-30 23:02) [11]

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

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


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

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


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

> 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:18) [14]

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

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


 
homm ©   (2007-10-30 23:22) [15]

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


 
DVM ©   (2007-10-30 23:46) [16]


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.11.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
15-1192549756
vasIZmax
2007-10-16 19:49
2007.11.25
Вот не могу сообразить, как лучше сделать


2-1194089436
timekiller
2007-11-03 14:30
2007.11.25
Делим строку на символы, практически..


11-1177917769
Dmitry___
2007-04-30 11:22
2007.11.25
Передать PControl в процедуру dll


15-1188359243
georgius
2007-08-29 07:47
2007.11.25
Новая версия urlmon


2-1193773009
Виктор007
2007-10-30 22:36
2007.11.25
Как в дельфи сделать такое