Frage zu Pascal $Define

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
ZenForAll
Beiträge: 38
Registriert: Fr 1. Sep 2023, 18:24

Frage zu Pascal $Define

Beitrag von ZenForAll »

Hallo
Tolle Lazarus Gemeinde
Gibt es eine Möglichkeit wie in "C" mit defines zu arbeiten
in C hat man die Möglichkeit
#define Debug
und dann
#ifdef
Code ausführen
#endif

geht sowas auch in Pascal oder geht das nur mit vorgefertigten defines wie unten WINDOWS
Ich hoffe es ist nicht zu konfus
https://wiki.lazarus.freepascal.org/LCL_Defines

{$ifdef WINDOWS}
// do some WINDOWS specific stuff
{$else}
// do whatever but only on non-windows platforms
{$endif}

Benutzeravatar
theo
Beiträge: 10454
Registriert: Mo 11. Sep 2006, 19:01

Re: Frage zu Pascal $Define

Beitrag von theo »


siro
Beiträge: 729
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Frage zu Pascal $Define

Beitrag von siro »

Ein kleines Beispiel dazu:

Das Schöne ist, dass der Lazarus Editor das auch gleich farblich darstellt, ob dieser Define existiert, bzw. welcher Code ausgeführt/compiliert wird.
Defined.png
Defined.png (9.81 KiB) 435 mal betrachtet
notDefined.png
notDefined.png (9.82 KiB) 435 mal betrachtet
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

ZenForAll
Beiträge: 38
Registriert: Fr 1. Sep 2023, 18:24

Re: Frage zu Pascal $Define

Beitrag von ZenForAll »

Wow ihr seit aber lieb und Super dazu
Danke

Benutzeravatar
photor
Beiträge: 431
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: Frage zu Pascal $Define

Beitrag von photor »

siro hat geschrieben:
Do 12. Okt 2023, 13:53
Ein kleines Beispiel dazu:

Das Schöne ist, dass der Lazarus Editor das auch gleich farblich darstellt, ob dieser Define existiert, bzw. welcher Code ausgeführt/compiliert wird.

Defined.png
notDefined.png
Anmerkung dazu:
diese '#define'-Anweisungen sind bei C eigentlich auch nicht Bestandteil der Sprache C selbst, sondern werden von einem Präprozessor (ich glaube, bei Gnu C hieß/heißt der 'cpp') verarbeitet. Das ist ein eigenes Programm, das über den C-Source-Code läuft und die entsprechenden Anweisungen im Quellcode ersetzt; erst dann kommt der eigentliche C-Compiler.

Grundsätzlich könntest du diesen Präprozessor vor jeden Text oder Code vorschalten - also auch Pascal. Du musst halt dafür sorgen, dass der aufgerufen wird, bevor der Pascal Compiler loslegt. Das könnte man über ein Make-File machen; wie man das aber sinnvoll in die Lazarus-IDE einbinden würde ...

Nur mal so angemerkt.

Ciao,
Photor

PS: das letzte mal, dass ich mit Make-Files und C rumgemacht habe, ist jetzt auch schon ein bisschen her. Kann sein, dass die Info oben veraltet ist.

Warf
Beiträge: 1904
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Frage zu Pascal $Define

Beitrag von Warf »

Es gibt ein paar Sachen die man zu Defines noch Anmerken sollte. Da in Pascal Units wie Namespaces funktionieren, und nicht wie C Header Files eingebunden werden, sind Defines nur Unit Lokal. Also ein {$Define DEBUG} in einer Datei betrifft nur diese Datei. In anderen Units, auch wenn die diese Unit über "uses" benutzen, ist {$IfDef DEBUG} nicht gesetzt.

Das kann man über 2 Mögliche wege umgehen.
1. Man erstellt eine Include datei die alle defines enthält und bindet die überall mittes {$I defines.inc} ein.
2. Man setzt die Defines als Compiler Parameter. Das geht wenn man über die Komandozeile Kompiliert mittels -dDEFINE also z.B. -dDEBUG. Für Lazarus Projekte kann man das in den Projekteinstellungen "Benutzerdefinierte Einstellungen" über den Button "Definitionen..." hinzufügen.

Außerdem, grade bei sowas wie Debug und Release, lohnt es sich Buildmodes zu konfigurieren: Projekteinstellungen->Compilereinstellungen und dann ganz oben ist eine ComboBox in der "Default" steht, daneben auf "..." Klicken dann öffnet sich ein Fenster. In diesem Fenster dann einfach "Create Debug and Release Mode" klicken, und danach den "Default" mode löschen und bei Debug beide Haken setzen.
Danach gehst du in die "Benutzerdefinierte Einstellungen" und fügst das Define DEBUG hinzu. Dann wechselst du oben in der Combobox in der vorher Default stand (und jetzt Debug stehen sollte) auf Release, und fügst dann das Define RELEASE hinzu. Zu guter letzt wechselst du wieder auf Debug um damit weiter zu arbeiten.

Jetzt kannst du im Debug modus fröhlich weiter Programmieren, hast standardmäßig die meisten Debugger Optionen aktiviert, sowie das Define DEBUG Projektweit gesetzt. Wenn du dann dein Projekt veröffentlichen willst gehst du auf Start->Viele Modi Kompilieren und wählst Release aus. dann baut dir Lazarus den Release Build, ohne Debug informationen, mit Optimierungen und statt dem Define DEBUG ist jetzt der Define RELEASE gesetzt.

charlytango
Beiträge: 841
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Frage zu Pascal $Define

Beitrag von charlytango »

Es gibt noch eine Möglichkeit für projektweite Einstellungen in einer eigenen Datei, ich habe aber noch nicht getestet ob die schon funktioniert

Antworten