- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 10

Thema: #ifndef und trotzdem "duplicate definitions"

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    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.

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Siro Beitrag anzeigen
    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

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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.

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von PicNick Beitrag anzeigen
    Das "ifndef" ist ja in der Include Datei ?
    dann sollte das hinhauen. Verwend' ich, wie alle anderen, exzessiv, das muss passen.
    Aber mit der Variablen-Definition darin und Verwendung in mehreren C-Dateien, funktioniert es dann nicht, weil es richtig wäre, sondern nur deshalb, weil der GCC-Linker per Default Mehrfach-Definitionen einfach stillschweigend zusammenlegt.
    MfG
    Stefan

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    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 Buchstabenfolge Also 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)

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Siro Beitrag anzeigen
    Upps, Unterschied Definition / Deklaration ist aber auch verwirrend....
    Ich dachte immer ein "define" ist eine Definition. (Allein schon wegen der Buchstabenfolge Also 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.....
    Falsche Baustelle. Bei Deklaration/Definition geht es um C-Variablen. Was du da aufzählst sind Präprozessor-Direktiven. Das hat nichts miteinander zu tun.


    Zitat Zitat von Siro Beitrag anzeigen
    Die Definition ist also all daß ,wo Speicher benötigt wird. Die Deklaration sagt nur aus, wie es aussieht.
    Ja.
    MfG
    Stefan

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 15.06.2011, 21:18
  2. Geschwindigkeitsmesser "testen" / "prüfen"
    Von Goblin im Forum Sensoren / Sensorik
    Antworten: 7
    Letzter Beitrag: 12.04.2011, 09:53
  3. "Soft-Reset?" und "Finger-Interrupt?"
    Von trapperjohn im Forum Asuro
    Antworten: 8
    Letzter Beitrag: 10.06.2008, 23:02
  4. "HCF 4096 BE" und "HCF 4095 BE" seriell-
    Von Bastler5 im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 15.05.2005, 13:23
  5. ASM: was machen "swap" und "cbr" genau?
    Von RHS im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 18.08.2004, 17:16

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress