Директива $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 — визначає підпрограму, яка повертає значення.
