Условная компиляция

Так другие компиляторы и не подозревают о существовании PacalАВС.NЕТ. Так что единый код Вы все равно не сможете написать. И далее, что значит “адаптировать”? У Вас там конструкции, не работающие в PascalАВС.NЕТ ?

То есть ничего подобного нет ? http://docwiki.embarcadero.com/RADStudio/Rio/en/Conditional_compilation_(Delphi)

https://wiki.freepascal.org/Platform_defines

Да, типы и другая фишка.

Нет, конечно. Вы берете многоплатформенные проекты и почему-то удивляетесь, что их директив нет в проекте, рассчитанном на одну платформу? Могу Вас “обрадовать”: подобных директив я не встречал и в других .NET языках.

По крайней мере компилятору надо сообщить о самом себе - {$DEFINE PASCALABC}. Я не прав?

Кому сообщить, что именно и зачем? Если версию надо сообщить - то она лежит в PascalABCVersion - просто выводите. Зачем в коде программы PascalАВС.NЕТ сообщать, что он код PascalАВС.NЕТ ? Право же, Вы чего-то странного хотите.

Как ты пишешь код который должен работать на Free Pascal / Delphi / PascalABC ? Есть пример ? Допустим есть код на FPC / Delphi с типом UInt16, как ты его напишешь, чтобы он работал и на PascalABC?

uses System;

begin
  var a: UInt16 := 65000;
  Write(a);
end.

И не нужно “тыкать”. Мы с Вами на брудершафт не пили…

Да, это правильная идея. Но у нас этого нет. Точнее, мы начинали делать это: в PABCSystem.pas есть

{$define PascalABC}

Но она распространяется только на уровень одного модуля.

Попробуем сделать на глобальном уровне

Отлично. А такой тип есть в PascalABC? Где почитать ? Ну а вот это - function ZZX(n: UInt64; start: UInt64): Pointer; cdecl; external ‘libyyy’ name LIB_FNPFX + ‘ZZX’;

Хорошо.

Такой - это какой? Я же Вам написал рабочий код. Что касается Pointer - забудьте про них в NET-языках. Тут ссылочная объектная модель, они не нужны. Почитать про типы кратко можете в Справке. Расширено - в литературе на официальном сайте и в справке по Microsoft.NЕТ

Да, не пили. Извиняюсь.

Сообщение Admin: У нас на форуме принято общаться на Вы.

Надо сказать, что наша реализация {$define} полностью соответствует дельфийской. Там тоже определение распространяется на модуль, а не на всю программу. Вот пример из Delphi:

program Project4;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  Unit3 in 'Unit3.pas';

var a: integer;

begin
   {$ifdef My}
   Write(1);
   {$endif}
   readln;
end.

А в Unit:

unit Unit3;

{$define My}

interface

implementation

end.

Так вот - программа не видит определение My из Unit.

То есть, обеспечивая совместимость, непонятно, как это сделать. В Delphi есть проекты, и в опциях проекта это можно указать. А без проекта - непонятно, как.

P.S. Кстати, в Delphi не определён символ Delphi

При наличии раздельной компиляции и с учетом того, что это директива (если верить Справке) предназначена для условной компиляции, с чего бы внешняя программа видела это определение? Другое дело, если говорить о том, чтобы сделать его глобальным. Но вот на самом деле, надо ли это настолько, чтобы заморачиваться? PascalАВС.NЕТ все дальше уходит от балласта, навязанного совместимостью с предшественниками.

5 сообщений перенесены в тему Болталка PascalABC.NET

@JulStrat, сделали. Скачайте новую версию.

Теперь в любом модуле и в основной программе определен символ PASCALABC. И этот код

begin
  {$ifdef PASCALABC}
  Print(1);
  {$endif}
  {$ifdef FPC}
  Print(2);
  {$endif}
end.

выводит 1

@Admin вы перестарались с болталкой. Первое моё сообщение было по теме.

Да, извините, не посмотрел. Но там половина сообщения по другой теме.

В любом случае, проблема решена, и я хотел чтобы @JulStrat обратил на это внимание

Спасибо, работает (v3.6.3.2607).