Параметрические макросы...

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

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

Ответить
Аватара пользователя
beria
постоялец
Сообщения: 130
Зарегистрирован: 29.09.2016 07:57:13

Параметрические макросы...

Сообщение beria »

Изучал код компилятора и нашел вот такое в trees.pas...

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

macro put_short(s, w)
begin
    {put_byte(s, (byte)((w) & 0xff));}
    s.pending_buf^[s.pending] := byte((w) and $ff);
    inc(s.pending);

    {put_byte(s, (byte)((word)(w) >> 8));}
    s.pending_buf^[s.pending] := byte(word(w) shr 8);;
    inc(s.pending);
end 
Я понимаю что нормальной систем макросов и препроцессора в FPC нет и подобный код не рабочий - но может это следы использования какого-то внешнего средства... Никто не в курсе? А то выглядит очень вкусно и полезно, как в С/С++.
wavebvg
постоялец
Сообщения: 355
Зарегистрирован: 28.02.2008 03:57:35

Сообщение wavebvg »

Это конвертация

В заголовке
trees.c -- output deflated data using Huffman coding
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

Макросы это конечно же ужас, летящий на крыльях ночи(с), но если очень хочется, то почему бы и нет?

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

program test;

{$mode objfpc}{$h+}{$macro on}

{$define CalcSum:=Sum:=(Op1)+(Op2)}
procedure TestCalcSum;
var
  I, J, Result: Integer;
begin
  I := 0;
  J := 42;
  {$define Op1:=I+7}{$define Op2:=J+42}{$define Sum:=Result}
  CalcSum;
  WriteLn(Result);
end;

begin
  TestCalcSum;
  ReadLn;
end.
Ответить