C #if #endif ... :)

Status
Für weitere Antworten geschlossen.

elektro2

Cadet 4th Year
Registriert
Feb. 2014
Beiträge
67
Hallo :))

Ich wollte fragen, warum das Ergebnis " ungleich " lautet. Im Internet steht, dass , wie auch beim normalen if der ausdruck wahr sein muss also ungleich 0. (a==0) ist aber falsch, also 0. Warum wird dann trotzdem ungleich gedruckt?


Code:
#include <stdio.h>
int main() {
  int a = 1;
  #if (a == 0)
    printf("ungleich");
  #else
    printf("gleich");
  #endif
return 0; }
 
Oha. Die Anweisungen mit der # sind Präprozessoranweisungen und werden vor dem eigentlichen Kompiliervorgang ausgeführt. Du möchtest eigentlich eine if-Anweisung (ohne #).
 
Du verwendest Präprozessordirektiven, keine gewöhnlichen if-else Blöcke.
Wie mein vorredner schon sagte, die werden zum zeitpunkt des Kompiliervorganges ausgeführt, womit sich z.B. auch Debug Versionen eines Programmes erstellen lassen:

Code:
#define DEBUG
     
#include <stdio.h>
     
int main()
{
    int i = 20;
    int j = 4;
    #ifdef DEBUG
    printf("Werte zugewiesen\n");
    #endif
    printf("%d * %d = %d\n", i, j, i*j);
    #ifdef DEBUG
    printf("Ergebnis ausgegeben\n");
    #endif     
}

Wenn du das Programm so kompilierst müsste folgende Ausgabe erfolgen:

Code:
Werte zugewiesen
20 * 4 = 80
Ergebnis ausgegeben

wenn du die zeile

Code:
#define debug
entfernst
müsste die Ausgabe so aussehen:
Code:
20 * 4 = 80

Wird z.B. dafür verwendet Code, der auf mehreren Plattformen ausgeführt werden sol, (z.b. Windows und Linux) zu spezialisieren:
Code:
#ifdef(WIN32)
/* Do windows stuff */
#elif(UNIX)
/* Do linux stuff */
#endif

oder um
Code:
#pragma once
zu umgehen:

Code:
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
/* declare functions*/
void printFrameAndField(unsigned int frameSize, unsigned int fieldSize);
#endif
 
Zuletzt bearbeitet: (erweitert, escape sequenz hat gefehlt)
Status
Für weitere Antworten geschlossen.
Zurück
Oben