INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Bedingte Compilierung von Extern
23.11.2020, 07:43 (Dieser Beitrag wurde zuletzt bearbeitet: 23.11.2020 07:45 von Nichtraucher.)
Beitrag #1
Bedingte Compilierung von Extern
Hallo!

Ich will in einer Datei ein "#define Wert x" verwenden.
"Wert" soll aber in einer anderen Datei des Projektes festgelegt werden.

Um zum Beispiel ein Array, in Datei#2, zu erstellen: "int meinArray[Wert];"
"Wert" soll aber in Datei#1 definiert werden: "#define Wert x".

So würde es normal in einer Datei funktionieren:
Code:
#define Wert 15
int meinArray[Wert];

Ich (ver)suche so etwas:

Datei#1
Code:
#define Wert 15
#include <Datei#2.h>

Datei#2.h
Code:
int meinArray[Wert];

Ich habe das mit Konstante versucht, in Datei#1: "const int Wert = 15;"
Und in Datei#2 mit: "extern const int Wert;"
Die Konstante kann ich so in Datei#2 sichtbar machen. Bekomme dann aber den Fehler: "array bound is not an integer constant before ']' token". Konstanten funktionieren hier nicht, für bedingte Compilierung.

Ich finde hier einfach keine Lösung. Suchmaschinen spucken auch noch nicht das richtige dazu aus. Ich finde diesen speziellen Fall z.Z. nirgends im Netz.

Wie bekomme ich ein "#define ...", das ich in Datei#1 hinterlege, in meine Datei#2 ? Also wie kann ich den per "#define" angegebenen Wert in Datei#2 übernehmen?

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 12:03
Beitrag #2
RE: Bedingte Compilierung von Extern
#define ist eine reine Textersetzung und muss zur Compilezeit bekannt sein.
Du könntest könntest versuchen, es in einer Headerdatei zu definieren, die Du includest.

extern kann man Variable deklarieren, keine Konstanten für die Compilezeit.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 13:03
Beitrag #3
RE: Bedingte Compilierung von Extern
Ich habe alles Mögliche versucht. Nichts hat funktioniert. Irgendwie funktioniert #define immer nur in der Datei, in der es steht. Eine H-Datei zu includen, würde keinen Sinn machen, dann kann ich das auch lassen. Ich wollte nicht immer ins Verzeichnis navigieren und die Bibliothek ändern, bloß weil ich für nodeMCU den einen Wert so brauche und für AVR einen andern Wert.

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 13:19
Beitrag #4
RE: Bedingte Compilierung von Extern
(23.11.2020 13:03)Nichtraucher schrieb:  Ich wollte nicht immer ins Verzeichnis navigieren und die Bibliothek ändern, bloß weil ich für nodeMCU den einen Wert so brauche und für AVR einen andern Wert.

Gruß

Servus!

Wär da nicht #ifdef eine Lösung?

Gruß aus Wiener Neustadt
Toni

=================================================================
Seit die Mathematiker über die Relativitätstheorie hergefallen sind, verstehe ich sie selbst nicht mehr.

Wer Rechtschreibfehler findet darf sie behalten Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 13:38
Beitrag #5
RE: Bedingte Compilierung von Extern
(23.11.2020 13:03)Nichtraucher schrieb:  Eine H-Datei zu includen, würde keinen Sinn machen, dann kann ich das auch lassen. Ich wollte nicht immer ins Verzeichnis navigieren und die Bibliothek ändern, bloß weil ich für nodeMCU den einen Wert so brauche und für AVR einen andern Wert.
Doch, genau dafür macht das Sinn.
mit #ifdefined. Schau mal hier

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 13:55 (Dieser Beitrag wurde zuletzt bearbeitet: 23.11.2020 14:02 von MicroBahner.)
Beitrag #6
RE: Bedingte Compilierung von Extern
(23.11.2020 13:03)Nichtraucher schrieb:  bloß weil ich für nodeMCU den einen Wert so brauche und für AVR einen andern Wert.
Ob für nodeMCU oder für AVR kompilert wird, kannst Du mit bereits vordefinierten defines abfragen.
Code:
#ifdef ESP8266
  ... // Einstellungen für ESP8266
#else
  ... // Einstellungen für AVR
#endif
Wenn Du auch noch andere Prozessoren unterstützen willst: Für alle Zielplattformen sind entsprechende defines vorhanden, sodass man immer abfragen kann, für welchen Prozessor gerade übersetzt wird ( einige davon stehen ja in dem Link von Tommy ).

P.S. Diese defines stehen in keiner .h-Datei, sondern werden dem Compiler als Aufrufparameter übergeben. Wenn man in den Voreinstellungen die 'ausführliche Ausgabe während Kompilierung' aktiviert, kann man sehen, was da übergeben wird.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 18:59
Beitrag #7
RE: Bedingte Compilierung von Extern
Ja, das mit dem Abfragen, ob was definiert ist, hatte ich versucht. Das Klappte nicht.

Ich hatte so probiert:

#ifndef __meinWert__
....

Bei dem Link vom Tommy habe ich jezt aber gerade was anderes gesehen:

#if defined(__AVR__)

Ich versuche das mal so, dann mit:

#if defined(__meinWert__)


Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 19:05
Beitrag #8
RE: Bedingte Compilierung von Extern
Eher so:
Code:
#if defined(__AVR__)
#define __MeinWert__ 5
#elif defined(ESP8266)
#define __MeinWert__ 22
#else
#error Falscher Prozessor
#endif

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Compilierung dauert lange student1704 6 9.173 22.09.2020 19:31
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste