Delphi справочник - Форум программистов - Навигация  
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z      По первой букве  
System     SysUtils     StrUtils     DateUtils     FileCtrl     ConvUtils     StdConvs     Math     Classes     Dialogs     Types     Variants    ПО Unit   Compiler directives     Directives     Keywords     Types     Variables     Constants     Functions     Procedures    По категории  
Подписаться на рассылку:
Клуб программистов


Основы Delphi
$X
Деректива компилятора
Контроль обработки некоторых расширений Паскаля unit
  
1 {$X-}

2 {$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 должен быть установлен в вашем коде только однажды.
Похожие команды
$BoolEval  Сокращаются ли вычисления при операциях or или and

$ExtendedSyntax  Контроль обработки некоторых расширений Паскаля

Function  Определяет подпрограмму, которая возвращает значение

 
Пример кода : Сбой компиляции кода, который не назначает результат функции
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'
 
Пример кода : Код, который не назначает результат функции компилируется нормально
begin
  // Выключение расширенного синтаксиса
  {$X+}

  // Вызов функции GetValue, не назначая результат
  GetValue;
end;

// Функция, которая просто возвращает значение 1
function TForm1.GetValue: Integer;
begin
  Result := 1;
end;
Код компилируется нормально и выполняется, нечего не делая.
 



© Блог программистов   |  Создание и продвижение сайтов - "Веб сателлит"  |  Ссылки  |     |  Английская версия