Директива $X компилятора Delphi – контроль обработки некоторых расширений Паскаля.
- {$X-}
- {$X+}
Директива компилятора $X определяет, включает ли Delphi множество расширений языка Паскаля или нет.
Это затрагивает три области:
1. Обработка функций как процедуры
Код примера показывает эффект до и после применения $X. Когда +, Delphi позволяет игнорировать результаты функции, таким образом отменяя обработку результатов функций, как будто это была процедура.
2. Использование результатов функций
С $X-, вы должны возвратить значение функции, присвоив его псевдопеременной с тем же самым именем, что и функция. Например: function GetValue : Integer; begin GetValue := 23; end; С $X +, вы можете присвоить псевдопеременной Result, как в коде примера.
3. Обработка массива Char как строки
С $X +, обнулённому массиву Char переменных может быть присвоено значение строки. Также может быть назначено, пока массив имеет элемент со значением #0, чтобы показать конец строки.
Примечания.
$ExtendedSyntax эквивалентна $X.
$X+ является значением по умолчанию
$X должен быть установлен в вашем коде только однажды.
Директива компилятора $X: Сбой компиляции кода, который не назначает результат функции
begin
// Выключение расширенного синтаксиса
{$X-}
// Вызов функции GetValue, не назначая результат
GetValue;
end;
// Функция, которая просто возвращает значение 1
function TForm1.GetValue: Integer;
begin
Result := 1;
end;
Результат
Сбой компиляции :
[Error] Unit1.pas(39): Statement expected, but expression of type 'Integer' found
[Error] Unit1.pas(45) Undeclared identifier: 'Result'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Директива компилятора $X: Код, который не назначает результат функции компилируется нормально
begin
// Выключение расширенного синтаксиса
{$X+}
// Вызов функции GetValue, не назначая результат
GetValue;
end;
// Функция, которая просто возвращает значение 1
function TForm1.GetValue: Integer;
begin
Result := 1;
end;
Результат
Код компилируется нормально и выполняется, нечего не делая.
Похожие функции, процедуры и команды
$BoolEval — сокращаются ли вычисления при операциях or или and.
$ExtendedSyntax — контроль обработки некоторых расширений Паскаля.
Function — определяет подпрограмму, которая возвращает значение.
