ESP8266-07 #define unklare Verwendung

Wenn ich in meinem Sketch ein

#define PUYA_SUPPORT 1

festlege, dann bekomme ich beim Compillieren die Fehlermeldung:

warning: "PUYA_SUPPORT" redefined [enabled by default]

 #define PUYA_SUPPORT 1

Als Herkunft der Definition wird die Datei esp.h angegeben, in der allerdings steht:

#ifndef PUYA_SUPPORT
  #define PUYA_SUPPORT 0
#endif

Meinem logischen Empfinden nach sollte aber meine Definition vorher stattfinden und damit das #ifndef (also wenn nicht definiert) gar nicht zum Tragen kommen. Ich habe dieses “#define PUYA_SUPPORT 1” auch vor allen #include Befehlen in meinen Code gesetzt… okay kein Problem, ich weiß nicht was der Compiler wann wie einbindet und verarbeitet, also habe ich den Code (in meinem Sketch) abgeändert in:

#ifdef PUYA_SUPPORT == 0
  #undef PUYA_SUPPORT
  #define PUYA_SUPPORT 1
#endif

es ändert nichts… die Fehlermeldung ist identisch. Das Verhalten finde ich erstmal seltsam, weil ich ja explizit “Frage”: Gibt es dich schon schon?

Kann es sein… ich kenne mich da wirklich nicht gut aus, dass ich den PUYA_SUPPORT nicht in der Datei mit #define… “aktiviere”, sondern dies dem Compiler als Kommandozeilenanhang mitgeben muss? Und wenn ja, wie bringe ich das Arduino bei?

Oder mache ich gerade einen riesigen Denkfehler?

Danke schon mal.

#ifdef PUYA_SUPPORT == 0

Das ist falsch. #ifdef überprüft nur ob es definiert ist. Für genauere Vergleiche gibt es #if

#define TEST 0

void setup()
{
  Serial.begin(9600);

#ifdef TEST
  Serial.println("Test definiert");
#else
  Serial.println("Test nicht definiert");
#endif

#if TEST == 0
  Serial.println("Test ist 0");
#else
  Serial.println("Test ist 1");
#endif
}

void loop()
{ }

Wenn du das auf 1 änderst ist das erste noch wahr (es ist definiert), aber er erkennt mit #if auf was es geändert wurde

Tommylicious1980:
Meinem logischen Empfinden nach sollte aber meine Definition vorher stattfinden und damit das #ifndef (also wenn nicht definiert) gar nicht zum Tragen kommen.

Das schaffst Du nicht, dein #define vor dem esp.h zu platzieren. Die .h-Dateinen der jeweiligen core-Systeme werden von der IDE eingebunden, und zwar vor allem, was Du in deinem Sketch schreibst.

Wenn Du dein == 0 weglässt, oder es so machst wie von Serenifly angegeben, dann funktioniert das:

#ifdef PUYA_SUPPORT
  #undef PUYA_SUPPORT
  #define PUYA_SUPPORT 1
#endif

Nebenwirkungen sind aber nicht ausgeschlossen, denn die von der IDE (+ vom Linker ) eingebundenen Dateien merken von deinem redefine nichts.