Форум: "Начинающим";
Текущий архив: 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