Хак для функций-призраков

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
runewalsh
энтузиаст
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Хак для функций-призраков

Сообщение runewalsh »

Сишный препроцессор, как известно, умеет

Код: Выделить всё

#ifdef DEBUG
    #define dprf(...) print_debug_message(__VA_ARGS__)
#else
    #define dprf(...)
#endif

dprf("отладочное сообщение раз");
...
dprf("отладочное сообщение два");

Есть соблазн использовать такие же макрофункции-призраки в FPC. Давно заметил, что работает трюк

Код: Выделить всё

{$ifdef DEBUG}
    {$define dprf := print_debug_message}
{$else}
    {$define dprf := ;//}
{$endif}

dprf("Главное, чтобы дальше в строке не было операторов (ну и ELSE, не переносить на другую строку и что-нибудь ещё)");

Так и задумано или лучше не рисковать?

Добавлено спустя 9 часов 44 минуты 12 секунд:
В рассылке рассказали про транкооптимизацию -OoREMOVEEMPTYPROCS, при определённых условиях способную вырезать вызов вместе с вычислением аргументов.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Поддержка макросов существует для совместимости с Mac Pascal, это документированная возможность, можно использовать без риска.
Аватара пользователя
runewalsh
энтузиаст
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Сообщение runewalsh »

Дело не в макросах самих по себе, а в забавном поведении //. Ну ок.
stanilar
постоялец
Сообщения: 289
Зарегистрирован: 09.03.2010 18:09:02

Сообщение stanilar »

runewalsh писал(а):В рассылке рассказали про транкооптимизацию

Извините за любопытство: что за рассылка?
Аватара пользователя
runewalsh
энтузиаст
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Сообщение runewalsh »

stanilar писал(а):Извините за любопытство: что за рассылка?

http://freepascal.org/maillist.var, не самый удобный формат в мире, но не нашёл, где ещё спросить.
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

сделай свой препроцессор кароч который будет удалять вырезать все вызовы при необходимости
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Препроцессор - лютое зло :(
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

По идее, вызовы пустых подпрограмм должны выкидываться вместе с вычислением аргументов. По крайней мере, если в этом вычислении не фигурируют вызовы нестандартных подпрограмм.
Если это так, то достаточно условной компиляции внутри dprf().
Ответить