Globale Makro

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Globale Makro

Beitrag von Maik81ftl »

Moin zusammen,

Mal eine kurze Frage, zu der Makroverwendung in Lazarus,

besteht die mgl, das man diese auch Global in der Projektunit definiert oder geht dies nur innerhalb der Jeweiligen Unit, wo diese verwendet werden soll.

Frage deshalb, da ich in meinem Jetzigen Proggi in jeder Unit mind. ein Makro verwende. zu einem meine geliebte elsif und zusätzlich kleine Konstanden welche wie folgt gelistet sind.

Makro in der Verwaltungsunit

Code: Alles auswählen

{$MACRO ON}
{$DEFINE elsif :=else if}
{$DEFINE bit:= Boolean}        // Bit definition


Das Bit nutzte ich deshalb, da ich bei dem Programm eine Bitweise abfrage erstelle und der asm-befehl nicht so läuft, wie ich will :(, da mir gerade nicht klar ist, welchen Befehlssatz für 32 und 64 Bit rechner ich hier anweden soll.

für PIC-Controller würde ich einfach den befehl

Code: Alles auswählen

btfsc Variable, pos
nutzen, kann ich hier allerdings vergessen.

Makro in der Mainunit

Code: Alles auswählen

{$DEFINE _set := True}
{$DEFINE _clr := false}


Für alternative Tip bin ich gerne zu haben.

Gruß Maik
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Globale Makro

Beitrag von mse »

{$defines } gelten nur in der unit in der sie definiert sind.

Code: Alles auswählen

{$DEFINE bit:= Boolean}

kann durch

Code: Alles auswählen

type
  bit = boolean;

ersetzt werden. Ansonsten müsstest du include files verwenden.

Martin
Zuletzt geändert von mse am Mo 16. Apr 2012, 07:45, insgesamt 1-mal geändert.

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Globale Makro

Beitrag von Maik81ftl »

Danke Martin.

Das Bit, was du hier definiert hast ist eine Valiabe, ich benodige dies allerdings als Tpy Ähnlich wie Int, String und co...
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Globale Makro

Beitrag von Socke »

Maik81ftl hat geschrieben:Das Bit, was du hier definiert hast ist eine Valiabe, ich benodige dies allerdings als Tpy Ähnlich wie Int, String und co...

Nein, eine Variable sieht anders aus (vergleiche Schlüsselworte type -- var sowie Gleichheitszeichen -- Doppelpunkt)

Code: Alles auswählen

var
  bit: Boolean;


Ansonsten kannst kannst du alle Compilerschalter auch so formulieren, dass der FPC diese auf der Komandozeile versteht. Diese Formulierung kannst du dann in den Projektoptionen unter "Compileroptionen -> Andere" eintragen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Globale Makro

Beitrag von Maik81ftl »

Sry Socke. Hab ich G'rad mit der Klassenvariable Verwechselt :|
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Globale Makro

Beitrag von marcov »

Maik81ftl hat geschrieben:Danke Martin.

Das Bit, was du hier definiert hast ist eine Valiabe, ich benodige dies allerdings als Tpy Ähnlich wie Int, String und co...


Wozu benötigst du bits?

Wenn es etwas mit "sparen" zu tun hat: Die meisten Prozessoren die Linux drehen können gibst keine direkte bit-level Adressierung wie zb im PIC. Das versuchen zu emulieren hält eine normaler Prozessor nur auf. Booleans sind noch immer 1 byte groß.

Für bits in records gibt es andere Konstruktionen wie zb

Code: Alles auswählen

type myrecord = bitpacked record
                          bit0 : 0..1;
                          bit12 : 0..3;
                          // usw
                            end;


Macro's kann man auch auf der Kommandozeile definieren. Das kann auch als "global" gesehen werden. Syntax ist -dMacroname:=macrowert

Antworten