Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.004 c
15-1261517422
Юрий
2009-12-23 00:30
2010.03.07
С днем рождения ! 23 декабря 2009 среда


2-1262514706
ЭлЭрДжи
2010-01-03 13:31
2010.03.07
Вопрос по типизированным файлам.


15-1261321920
asail
2009-12-20 18:12
2010.03.07
Нужен совет по приобретению. нетбука...


15-1261561398
vv_fran
2009-12-23 12:43
2010.03.07
Нагрузка на проц от Delphi 7 в Win2003 Server


15-1261467759
zorik
2009-12-22 10:42
2010.03.07
dll в компоненте. За и против?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский