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

Вниз

ленивые вычисления   Найти похожие ветки 

 
RWolf ©   (2010-01-05 17:40) [0]

Допустим, нужно вывести в лог строчку, если установлен флаг отладки.
Конструкция вида if DebugFlag then WriteLog(s) загромождает исходники, поэтому пишем процедуру
procedure Debug(const s:string);
begin
 if DebugFlag then WriteLog(s)
end;

Всё бы хорошо, но теперь s вычисляется всегда, независимо от значения DebugFlag — лишняя загрузка CPU.
Есть ли простая в плане читаемости синтаксическая конструкция вроде вышеупомянутого вызова процедуры Debug, чтобы передаваемая в неё строка вычислялась в зависимости от условия?
скажем, в Си можно было бы просто определить макрос
#define DEBUG(...) if (DebugFlag) printf(__VA_ARGS__)


 
Jeer ©   (2010-01-05 17:49) [1]

Т.е. посмотреть/почитать о {$IFDEF whoiswho}.. {$ELSE}.. {$ENDIF} не судьба ?


 
RWolf ©   (2010-01-05 17:50) [2]

Jeer ©   (05.01.10 17:49) [1]
речь не об условной компиляции, нужен именно runtime.


 
Jeer ©   (2010-01-05 18:11) [3]

1. Если говорить о варианте дебаг/боевой - чем мешает IFDEF ?
2. Не вижу проблем в:
if gDebug then MyDebugLog(s);

В более современных версиях может что-то есть менее "загроможнающее".


 
grammar-nazi   (2010-01-05 18:14) [4]

> RWolf ©   (05.01.10 17:50) [2]
> речь не об условной компиляции, нужен именно runtime.

как это согласовывается с

> RWolf ©   (05.01.10 17:40)  
> скажем, в Си можно было бы просто определить макрос
> #define DEBUG(...) if (DebugFlag) printf(__VA_ARGS__)
?


 
Демо ©   (2010-01-05 18:15) [5]


> Всё бы хорошо, но теперь s вычисляется всегда,


Что значит "вычисляется"?
В функцию передаётся ссылка - и всё.
Какая тут лишняя загрузка процессора?


 
grammar-nazi   (2010-01-05 18:19) [6]

> Демо ©   (05.01.10 18:15) [5]
> Что значит "вычисляется"?
> В функцию передаётся ссылка - и всё.
> Какая тут лишняя загрузка процессора?

вот то, на что указывает ссылка, передаваемая в функцию, и вычисляется.


 
Кука съела ник   (2010-01-05 18:26) [7]


> Какая тут лишняя загрузка процессора?


DebugLog (Format("%s%s%s%s", ["aaa"+foo, "bbb"+bar,"ccc"+bazz,"ddd"+blinch])


 
Демо ©   (2010-01-05 18:28) [8]


> вот то, на что указывает ссылка, передаваемая в функцию,
>  и вычисляется.


Ну раз в рантайм, только конструкция if DefDebug then...


 
RWolf ©   (2010-01-05 18:59) [9]


> grammar-nazi   (05.01.10 18:14) [4]

> как это согласовывается с
> #define DEBUG(...) if (DebugFlag) printf(__VA_ARGS__)


макрос DEBUG("x=%d\n", x) развернётся в if (DebugFlag) printf("x=%d\n", x)



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

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

Наверх




Память: 0.48 MB
Время: 0.012 c
1-1238605534
dests
2009-04-01 21:05
2010.03.07
Пропало окно с ошибками в интерфейсе Delphi


2-1262076709
tipman
2009-12-29 11:51
2010.03.07
Узнать о завершении работы потока, как?


1-1238692057
SergN
2009-04-02 21:07
2010.03.07
Как узнать каким приложением занят файл


1-1239268291
sniknik
2009-04-09 13:11
2010.03.07
Ошибка преобразования RTF в PlainText через TRichEdit


3-1235981052
Sergey2
2009-03-02 11:04
2010.03.07
Связать 2 таблицы