Autor Thema: define/constant  (Gelesen 2487 mal)

Offline hannes

  • Newbie
  • *
  • Beiträge: 39
    • Profil anzeigen
define/constant
« am: November 01, 2014, 18:37:51 Nachmittag »
Hallo
Kann mir einer den Unterschied zwischen define und constant erklären.
Im konkretem Fall möchte ich einem Label (FIFO_STATUS) eine Hex Zahl zuweisen(0x17)
Muß ich jetzt schreiben
 constant FIFO_STATUS = 0x17
oder
#define FIFO_STATUS 0x17
komme ich irgendwie nicht klar was nun richtig ist

Gruß
HJ

picalic

  • Gast
Re: define/constant
« Antwort #1 am: November 02, 2014, 13:02:15 Nachmittag »
Hallo Hannes,

der Unterschied ist, daß "constant" dem Label an dieser Stelle tatsächlich den festen Zahlenwert zuweist, der dann beim Auftauchen des Labels im Quellcode jeweils eingesetzt wird, während "#define" eine Textsubstitution ist. Für Dein einfaches Beispiel ist das egal und es ist hier wohl eher Geschmacksache, welche Form man bevorzugt. Wenn es komplexer wird, treten Unterschiede zu Tage:
"constant zahl = 20+x" geht nur, wenn x in den Zeilen vorher definiert wurde, während bei "#define zahl (20+x)" x noch nicht bekannt sein muss und der Ausdruck erst ausgewertet wird, wenn "zahl" im Quelltext verwendet wird, also wenn der Assembler z.B. den Befehl "movlw zahl" übersetzt. "zahl" kann dann sogar an verschiedenen Stellen verschiedene Werte annehmen, wenn nämlich x verschiedene Werte annimmt (z.B. durch "set"-Directive).
Übrigens: Die Klammern sind für #define zwar nicht notwendig, verhindern aber ggf. unerwartete Nebeneffekte:
"zahl*2" wird nämlich ohne die Klammern zu "20+x*2" aufgelöst, was sich doch etwas von "(20+x)*2" unterscheidet...

Gruß,

Thomas
   


Offline hannes

  • Newbie
  • *
  • Beiträge: 39
    • Profil anzeigen
Re: define/constant
« Antwort #2 am: November 02, 2014, 19:54:46 Nachmittag »
Hallo Thomas
Besten Dank für die ausführliche Antwort. Bin jetzt mal wieder ein bisschen schlauer
geworden.
Gruß
HJ

 


* Recent Topics