Art #define in funktion?



  • Hi ihr, gibt es eine art von define die man in einer funktion machen kann?

    z.b.
    [cpp]switch(nummer){
    case 1:
    #define A_BUTTON key.down.1
    break;

    case 2:
    #define A_BUTTOM key.down.2
    break;
    }

    sry kann mich nicht richtig ausdrücken ...

    Mfg Lukas3



  • Dann überleg dir erst einmal was dein Problem ist und erkläre es in ganzen Sätzen.

    Auf Ratespielchen hat hier keiner Bock!

    Und #defines können überall stehen, die haben mit der Sprache ja nichts zu tun.



  • kk sry ^^

    also mein problem ist das ich abfragen will ob "key.down" eingetretten ist.

    aber welcher key hängt von einer variable ab die den wert 1-10 hat,
    wenn sie z.b. den wert 1 hat soll "K_UP" "key.down.1" sein, wenn sie 2 ist soll z.b. "K_UP" "key.down.5" sein.

    also so etwa :

    switch(nummer){
    case 1:
    #define K_UP key.down.1
    break;
    
    case 2:
    #define K_UP key.down.5
    break;
    }
    

    das geht aber nicht ^^

    also ist meine frage ob es eine möglichkeit gibt die funktionier 🙂



  • Du wirst dir bei diesem Weg ja sicher auch gewisse Gedanken gemacht haben, aber überleg dir doch mal, ob das ganze nicht doch etwas einfach und vorallem lesbarer geht.

    Was möchtest du denn überhaupt machen? Zustände abfragen und daraufhin "Schalter" stellen? Sowas kannst du doch ganz einfach mit Variablen machen.



  • also ich will halt so machen wie es da steht ^^

    die structur sieht so aus :

    typedef struct {
       u8 A, B, X, Y, L, R, Up, Down, Right, Left, Start, Select, Anykey;
    } PA_Pad;
    

    habe es schon mit einer u8 variable getestet ging aber nit 😕 geht nur mit einem define ...

    Lukas3



  • Also mit so ein paar Häppchen an Informationen ist es schwer ein Gesamtbild davon zu bekommen, was du bezweckst. Erklär doch einfach mal etwas ausführlicher, was du willst, was du versucht hast und ob es evtl. auch irgendwelche Fehlermeldungen oder sonst was gab. Und ein bisschen mehr Code wäre auch nicht verkehrt. Denn ich glaube kaum, dass hier die magische Kristalkugel von irgendwem noch so recht funktioniert 😉



  • sry aber ich glaube das es genug informationen sind xD

    also :
    - es gibt ja #define ne?
    - damit kann ich ja was "verlinken" z.b. "#define K_UP Pad.Held.Up"
    - wenn man nun auf K_UP zugreift leitet das einen weiter zu Pad.Held.UP
    - aber #define kann man ja nur auserhalb einer funktion benutzen.
    - ich wurde es aber gerade in einer funktion benutzen nur das es halt nicht geht

    normal :

    #define K_UP Pad.Held.Up
    
    main(){
    if(K_UP) printf("Pfeiltaste-Hoch wurde gedrückt"); //K_UP wird überprüft (welches mit Pad.Held.Up verlinkt ist)
    return 1;
    }
    

    ich würde es aber gerne irgentwie so machen:

    main(){
    int nummer;
    scanf ("%d",&nummer);
    
    switch(nummer) {
    case 1:
    #define K_UP Pad.Held.Up //wenn man 1 eingegeben hat wird K_UP mit Pad.Held.Up verlinkt
    break;
    
    case 2:
    #define K_UP Pad.Held.Down //wenn man 2 eingegeben hat wird K_UP mit Pad.Held.Down verlinkt
    break;
    }
    

    aber das geht halt nicht ^^ deswegen suche ich eine andere möglichkeit



  • Wer hat denn diese Struktur verbrochen? Die ist zum programmieren ja mal völlig ungeeignet, wie du gerade selbst siehst.



  • Warum benutzt du nicht einfach eine Variable für K_UP?



  • Lukas3 schrieb:

    also :
    - es gibt ja #define ne?
    - damit kann ich ja was "verlinken" z.b. "#define K_UP Pad.Held.Up"
    - wenn man nun auf K_UP zugreift leitet das einen weiter zu Pad.Held.UP
    - aber #define kann man ja nur auserhalb einer funktion benutzen.
    - ich wurde es aber gerade in einer funktion benutzen nur das es halt nicht geht

    Bis auf den ersten Punkt stimmt leider nichts. 😃

    #define verlinkt gar nichts, leitet also auch nicht weiter. Es erzeugt einfache Textersetzungen, und dies zur Compilezeit. Das impliziert, dass es nicht auf Laufzeitereignisse wie die switch -Verzweigung reagieren kann, weil es dann nicht mehr existiert.

    Was du willst, kann man wie gesagt mit normalen Variablen lösen (der Typ ist dann eben der von Pad.Held.Up ).



  • Um's nochmal klar zu sagen: die #defines werden VOR dem Kompilieren durch den Präprozessor aufgelöst. Du wirst durch dein Konstrukt wahrscheinlich auch eine Warnung bekommen haben (von wegen redefinition oder so). Du sagst zuerst, dass der Text "K_UP" in deinem kompletten Quellcode durch "key.down.1" ersetzt werden soll. Danach sagst du aber, dass stattdessen "key.down.5" da stehen soll. Es gilt dann wohl letzteres. Dein switch-statement sieht für den Compiler übrigens so aus:

    switch(nummer){
    case 1:
    break;
    
    case 2:
    break;
    }
    

    Kein Wunder, dass das nicht funktioniert, oder? 😋
    An diese Stellen etwas einfügen könntest du theoretisch mit #include (ebenfalls eine einfache Textersetzung, die allerdings eine ganze Datei statt eines String-Literals einfügt). Aber bitte, bitte, tu es nicht! Nimm, wie bereits vorgeschlagen, einfach eine Variable. Und google mal nach Präprozessor.


Anmelden zum Antworten