D7 - FPC - różnice

0

Witam.

Robię zadania do OI, ale mój problem jest natury ogólnej. Pisałem w Delphi (Console Application ofc) i działało, ale jak kompiluję Free Pascal Compilerem, i potem uruchamiam, to crashuje z błędem 217 (gdy biorę Debug->Output widzę kilka błędów 201 i Range Check Error). Gdzie są więc różnice między Delphi a FPC? W kodzie jest biblioteka SysUtils, ale gdyby jej nie było to by przecież na poziomie kompilatora wywalało błąd. A tu się kompiluje. Nie mam pojęcia, co mogę zmienić. Pozmieniałem "result" na nazwy funkcji i to było jedyne, co zmieniałem.

Pozdrawiam.

PS Gdzie znaleźć spis funkcji SysUtils? Może faktycznie użyłem czegoś, czego FPC nie obsługuje? Ale czemu w takim razie się kompiluje?

PS2: Bym zapomniał, inny program z SysUtils działa. Nie widzę różnic w funkcjach w kodach obu programów, tzn. używane są raczej te same. SysUtils działa w ogóle na linuksie?

0

Wejdź:
Options/Compiler Swiches/Generated Code i odznacz:
Range checking
Stack cheching
Options/Compiler Swiches/Syntax i zaznacz:
Delphi Compatible

Powinno zadziałać. A jak nie to pogadamy ;)

PS. 2.2.4\doc\rtl.pdf

PS2. Tak sisutils powinno działać na linuxie, ale w dokumentacji jest wspomniane:
Localization support depends on various constants and structures being initialized correctly. On
Windows and OS/2 this is done automatically: a widestring manager is installed by default which
helps taking care of the current locale when performing various operations on strings. The various
internationalization settings (date/time format, currency, language etc) are also initialized correctly
on these platforms.
On unixes, the widestring support is in a separate unit: cwstring, which loads the various needed
functions from the C library. It should be added manually to the uses clause of your program. No
initialization settings are applied by this unit, these must be initialized separately for the moment.
Przetłumacz sobie sam.

0

Ok. Dzięki temu program się kompiluje i uruchamia w FPC 2.2.4. Jednak nie ja go będę w Warszawie sprawdzał. Nie napiszę przecież, żeby ktoś wyłączył Range Checking w komentarzu w kodzie :D Dlatego co sprawia, że ten switch RangeChecking (wystarczy tylko jego wyłączyć, żeby działało) powoduje błędy? Jak zrobić, żeby nie powodowało? Mam trzy programy które się ładnie kompilują i uruchamiają potem pod FPC i ten jeden nieszczęsny.

Pozdrawiam.

PS Mam jeszcze 2 godziny i chciałbym skończyć piąty program, więc nie mam średnio czasu przeszukiwać żmudnie dokumentację ;/

PS Dzięki :)

0

Nie podałeś na jakiej instrukcji wyrzuca ten błąd.
A są dwie możliwości: albo w programie jest błąd przekroczenia zakresu, i wykrzacza się podczas kompilacji z włączoną kontrolą, albo kod jest celowo pisany pod wyłączony range checking, a wtedy najlepsze co możemy zrobić, to wyłączyć sprawdzanie zakresów.
Dodaj

{$R-}

gdzieś na początku pliku źródłowego (poniżej program/unit/library, ale powyżej jakiejkolwiek deklaracji zmiennej czy funkcji), a wyłączysz range checking niezależnie od tego co jest ustawione w opcjach Delphi/fpc.
Dodaj jeszcze na samej górze pliku (każdego):

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}

żeby zapewnić sobie większą zgodność z Delphi.

0

Wyrzuca w skompilowanym, zbudowanym programie po uruchomieniu - nawet nie pamiętam czy po wczytaniu wartości, czy od razu, bo to już...nieważne. Ktoś poza forum mi pomógł wyłączyć range checking dyrektywą kompilatora, poza tym już po terminie. nie o Delphi integrating chodziło, tak czy siak dzięki :)

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1