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

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

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

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

Сообщение beria » 01.10.2022 17:57:08

Изучал код компилятора и нашел вот такое в 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 нет и подобный код не рабочий - но может это следы использования какого-то внешнего средства... Никто не в курсе? А то выглядит очень вкусно и полезно, как в С/С++.
Аватара пользователя
beria
постоялец
 
Сообщения: 130
Зарегистрирован: 29.09.2016 08:57:13

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

Сообщение wavebvg » 01.10.2022 18:38:40

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

В заголовке
trees.c -- output deflated data using Huffman coding
wavebvg
постоялец
 
Сообщения: 354
Зарегистрирован: 28.02.2008 04:57:35

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

Сообщение iskander » 03.10.2022 13:48:09

Макросы это конечно же ужас, летящий на крыльях ночи(с), но если очень хочется, то почему бы и нет?
Код: Выделить всё
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.
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

Рейтинг@Mail.ru