Hallo
Ich schreibe immer
#define xxx 1
Dann ist xxx als 1 definiert und #ifndef xxx erkennt das richtig.
Gruß
mic
Hallo
Ich schreibe immer
#define xxx 1
Dann ist xxx als 1 definiert und #ifndef xxx erkennt das richtig.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Sorry, aber das ist Unsinn. Zum einen hat Siros Problem nichts mit "Define richtig erkennen" zu tun, und zum anderen ist auch die Aussage selbst falsch. Die 1 (oder was auch immer) ist nicht notwendig, damit ein #ifdef (oder #ifndef) funktioniert. Ein "leeres" Define ist völlig ausreichend.
MfG
Stefan
Danke zunächst für eure geteilten Meinungen.
Aber das löst nicht mein Problem.
Ich weis, das ich dem define xxx auch einen Wert zuweisen kann(aber nicht muss, wie "sternst" eben schrieb)
ich wollte bzw. habe aber eine Variable in dem Block definiert. Und das scheint der Compiler nicht zu mögen, was ich ehlich gesagt nicht verstehe.
Das define xxx wird doch nur einmal durchlaufen, dann is es definiert und dann dürfte der Compiler doch auch nicht versuchen erneut meine Variable anzulegen und deshalb eine Fehler verursachen.
Das ist doch eigentlich nur eine Anweisung für den Compiler, daß er den Block nicht weiter berücksichtigen soll, wenn xxx schon definiert wurde, damit müste doch eine doppel deklaration ausgeschlossen sein.
Aber nur in Bezug auf eine C-Datei. Beim Übersetzen der nächsten C-Datei interessiert es den Compiler einen feuchten Furz was beim Übersetzen der vorigen alles definiert war. Jede C-Datei wird separat (völlig getrennt von den anderen) übersetzt.
Außerdem ist es keine "doppel deklaration", sondern eine doppelte Definition. Das ist ja gerade der Knackpunkt, wäre es eine Deklaration, gäbe es kein Problem. Wenn dir der Unterschied nicht geläufig ist, ist es jetzt höchste Eisenbahn, das mal nachzuschlagen.
MfG
Stefan
Das "ifndef" ist ja in der Include Datei ?
dann sollte das hinhauen. Verwend' ich, wie alle anderen, exzessiv, das muss passen.
aaaaaber "myvar" kann natürlich trotzdem irgendwo ein zweitesmal wo stehen (irrtümlicherweise).
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Achso, ich glaube jetzt verstehe ich es.
Da der Compiler jedes C-Modul separat compiliert und jeweils eine eigene Objekt Datei erstellt, haben beide Dateien dann "myvar".
Das tut erstmal noch keinem weh, aber wenn der Linker an die Reihe kommt, stellt er diesen Doppelbezug fest und meckert.
Es gibt zwei Objekt-Dateien mit jeweils einer eigenen Variablen Namens "myvar"
Klingt logisch.
Upps, Unterschied Definition / Deklaration ist aber auch verwirrend....
Ich dachte immer ein "define" ist eine Definition. (Allein schon wegen der BuchstabenfolgeAlso eine Beschreibung ohne Speicherbedarf.
Dann ist also ein "define" eine Deklaration ?
dann wäre doch "ifdef" eigentlich "if declaration", sieht aber aus wie "if define" ???? was ja Speicher benötigen würde.
ein ifdef xxx benötigt doch aber keinen Speicher. Dann müste es korrekterweise "ifdecl" oder ähnlich heissen.
Hm, nicht ganz einleuchtend.....
Die Definition ist also all daß ,wo Speicher benötigt wird. Die Deklaration sagt nur aus, wie es aussieht.
Auf Delphi bezogen wäre also die Definition eine "Instanz" eines Objekts.
Ist das richtig so ?, ich hoffe ich habe nix durcheinandergebracht, außer mich selbst....
Siro
Geändert von Siro (21.06.2011 um 15:41 Uhr)
Lesezeichen