Go Down

Topic: #ifndef - #endif Error (Read 175 times) previous topic - next topic


combie

Du hast mein volles Mitgefühl.
Aber leider kann ich das Problem bei mir nicht reproduzieren.
Entsprechend schwer fällt es mir, auf die Stelle im Code zu zeigen, welche du vor uns/mir verborgen hältst.
Ein schwarzes Schaf, zur rechten Zeit, erspart den Streit, bringt Einigkeit.

noiasca

mal mit

#define DEBUG_ENABLE 1

probiert?
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

(deleted)


combie

Quote
Ich werde versuchen, ihn so weit zu reduzieren, dass er einigermaßen übersichtlich und das Problem erhalten bleibt.
Das ist immer eine gute Idee!

Die Wahrscheinlichkeit, dass dir der Fehler dabei entgegen springt, selber ins Auge fällt, ist sehr groß.
Ein schwarzes Schaf, zur rechten Zeit, erspart den Streit, bringt Einigkeit.

my_xy_projekt

#5
Aug 20, 2020, 12:52 pm Last Edit: Aug 20, 2020, 01:00 pm by my_xy_projekt
Beim Compilieren bekomme ich dann den Fehler

#endif without #if
Kannst Du ausschliesssen, das sich irgendwo noch ein weiteres #endif versteckt hat?
Evetl. in einem anderen tab?

Sketch formatieren mit STRG-T - die präpos bleiben vorne stehen.

noiasca

klappt:

Code: [Select]

#define DEBUG_ENABLE 1


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

#ifdef DEBUG_ENABLE
  Serial.println("ifdef");
#endif

#ifndef DEBUG_ENABLE
  Serial.println("ifndef");
#endif
  Serial.println("immer");
}

void loop() {
}
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

Doc_Arduino

#7
Aug 20, 2020, 02:16 pm Last Edit: Aug 20, 2020, 02:17 pm by Doc_Arduino
Hallo,

vermutlich hast du mehrere #ifndef / #endif Abschnitte drin und für irgendeins fehlt was dafür. Ähnlich wie bei Anweisungsblöcken. Wenn dabei eine Klammer fehlt gehts nicht.

Eine Alternative zu Makro Orgien wäre enum class.
Code: [Select]

enum class state : byte {RELEASE, DEBUG};  
const state debugging = state::DEBUG;       // Schalter

void setup (void)
{  
  if (debugging == state::DEBUG)
  {
    Serial.begin(115200);
    Serial.println("\nStart");
  }
}

void loop (void)
{
  
}


Aber zeig erstmal den reduzierten Testcode zum nachvollziehen. Im Grunde brauchst du nur sowas ähnlich kurzes zum testen und kommst vielleicht schon selbst drauf.
Code: [Select]

byte var = 111;
#define DEBUG_DISABLE   // oder auskommentieren

void setup (void)
{
  #ifndef DEBUG_DISABLE
    var = 222;
  #endif
  Serial.begin(115200);
  Serial.println("\nStart");
  Serial.println(var);
}

void loop (void)
{

}
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

(deleted)


michael_x

Der Präprozessor arbeitet Zeilen-orientiert.

Mach nach deinem case 'n': einen Zeilenumbruch und fang das #ifdef in einer neuen Zeile an (mit höchstens Leerzeichen davor).

my_xy_projekt

Code: [Select]


{
    case 'n':  
               #ifndef DEBUG_ENABLE
                Keyboard.write(KEY_RETURN);
                #endif
                Serial.print("ENTER"); Serial.print(" ");
                break;
    default:    break;
}

das geht.

(deleted)


Serenifly

#12
Aug 20, 2020, 03:20 pm Last Edit: Aug 20, 2020, 05:01 pm by Serenifly
Was auch gut geht ist das:

Code: [Select]

#define DEBUG

#ifdef DEBUG
  #define debugPrint(...) Serial.print(__VA_ARGS__)
  #define debugPrintln(...) Serial.println(__VA_ARGS__)
  #define debugBegin(...) Serial.begin(__VA_ARGS__)
#else
  #define debugPrint(...)
  #define debugPrintln(...)
  #define debugBegin(...)
#endif


Dann hat man die Makro Abfrage nur einmal und die Debug-Ausgaben sind Einzeiler. Wenn man die erste Zeile auskommentiert wird der Text einfach durch Nichts ersetzt und so nicht vorhanden.

Man kann das auch mit DEBUG = 1 und #if machen. So kann man auch mehrere Ausführlichkeits-Stufen implementieren

Go Up