Главная страница
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.019 c
15-1192696621
Начальник ИТ
2007-10-18 12:37
2007.11.25
Организация передачи данных по диал-ап соединению


6-1172990416
todeus
2007-03-04 09:40
2007.11.25
Проблема с написанием чата...


4-1179223552
SpellCaster
2007-05-15 14:05
2007.11.25
Остановка спящих потоков


2-1193721081
Ypbi4
2007-10-30 08:11
2007.11.25
Потоки


15-1191929132
Nucer
2007-10-09 15:25
2007.11.25
Ever more