Да, хотя он может быть встроен и исчезнуть
Если он не виден вне модуля (например, экспортируется как функция DLL), то нет, компилятор экономит пространство, не включая неиспользуемые функции в исполняемый файл
Возможно, компилятор мог бы оптимизировать вызов, когда видит, что функция ничего не делает
$IFDEF
используется для изменения текста исходного файла до того, как компилятор его увидит. Когда вы используете $IFDEF
в первом методе и LOG_ENABLED
не определен, метод выглядит так для компилятора
procedure LogSomething;
begin
end;
Когда определено , оно выглядит следующим образом
procedure LogSomething;
begin
ShowMessage('Something is logged');
end;