Grundlagen der Programmiersprache C

#define DEBUG 0
#ifdef DEBUG
    printf("A\n");
#endif
#if DEBUG
    printf("B\n");
#endif

Der obige Code steht in der Funktion main. Welche Ausgabe erzeugt er bei der Ausführung?

  1. ANur A wird ausgegeben
  2. BNichts wird ausgegeben
  3. CA und B werden ausgegeben
Antwort und Erläuterung anzeigen

Antwort: A. Nur A wird ausgegeben

#ifdef DEBUG prüft nur, ob ein Makro namens DEBUG definiert ist, nicht seinen Wert. DEBUG ist mit dem Wert 0 definiert, daher ist die Bedingung wahr, und die Anweisung, die A ausgibt, wird kompiliert. #if DEBUG prüft den Wert; er ist 0 und damit falsch, sodass die Anweisung, die B ausgibt, entfernt wird. Wer Debug-Code ein- und ausschaltet, sollte einheitlich entweder mit #ifdef oder mit #if prüfen, sonst entstehen solche Widersprüche.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Programmiersprache C

  1. Bei einem Mikrocontroller wird das Ausgaberegister wie oben deklariert und verwendet. Welche Aussage über diese Deklaration ist richtig?
  2. Welche Aussage beschreibt das undefinierte Verhalten im Sinne des C-Standards richtig?
  3. int und unsigned int haben 32 Bit. Was davon ist nach dem C-Standard undefiniertes Verhalten?
  4. Wird die obige Funktion mit gcc und aktivierter Optimierung kompiliert, kann die Prüfung if (p == NULL) entfernt werden. Was ist der Grund dafür?
  5. Was legt der C-Standard über die Größe des Typs int fest?