Präprozessor:



  • Hi, wieso klappt folgender Code nicht:

    #include <iostream>
    using namespace std;
    
    #define KOMMAZAHL 1
    
    main()
    {
    #if KOMMAZAHL==1
    {
    	float zahl1, zahl2;
    }
    #else
    {
    	int zahl1, zahl2;
    }
    #endif
    	cout<<"Bitte geben sie die erste Zahl ein: ";
    	cin>>zahl1;
    	cout<<"Bitte geben sie die zweite Zahl ein: ";
    	cin>>zahl2;
    	return 0;
    }
    

    Fehlermeldung: zahl1, zahl2 nichtdeklarierter Bezeichner...



  • das Problem liegt daran, dass lokale Variablen nur bis zum Ende des Scopes gültig sind und du öffnest ja in den Präprozessor Anweisungen immer ein neuen Scope, in dem du die Variablen anlegt

    int main() { //<-- int nicht vergessen
     { //hier öffnest du einen neuen Scope
       float a,b; //hier werden a und b auf dem Stack angelegt
       //hier existiert a,b
     } //hier werden die Variablen wieder zerstört, weil der Scope sich schließt
     //hier existieren sie nicht mehr
    }
    

    lass also die { } Weg in den Präprozessor Anweisungen



  • ah, verstehe, danke!


Anmelden zum Antworten