Was macht denn der "conditional operator"?



  • Liebe Forumsmitglieder,

    beim Stöbern in meinem Compiler- Manual nach einer ganz anderen Sache bin ich über einen "conditional operator"

    ?:
    

    gestolpert, den ich noch nirgendwo vorher gesehen habe.
    Unter http://eli-project.sourceforge.net/c_html/c.html#s6.1.5 finde ich zwar:

    Conditional operator[112]==
    conditional_expression:
      logical_OR_expression /
      logical_OR_expression '?' expression ':' conditional_expression .
    
    This macro is invoked in definition 2. 
    Conditional operator semantics[113]==
    INDICATION Conditional_Indication: Conditional_Op, Ptr_Conditional_Op;
    OPER Conditional_Op(TypeIs_Scalar): TypeIs_int;
    
    This macro is invoked in definition 5. 
    Distinct conditional operators are defined for each pointer type other than TypeIs_VoidPointer. 
    Operators defined for this pointer type[114]==
    OPER Ptr_Conditional_Op(TypeIs_Pointer): TypeIs_int;
    
    This macro is defined in definitions 74, 78, 81, 83, 86, 91, 96, 99, 108, 111, 114, 119, and 124.
    This macro is invoked in definition 39. 
    This specification constrains only the first operand of the conditional. Temporarily, the specification will simply balance the second and third operands of the conditional to obtain the result type.
    

    Aber schlauer werde ich daraus auch nicht 😞

    Hat jemand Ahnung, was das Ding wirklich macht und welchen praktischen Nutzen das haben könnte? 😕
    Vielleicht sogar mit Beispiel?

    Danke schonmal im Voraus! 😃



  • Dann wollen wir den mal im Zusammenhang zeigen:

    bedingung ? wert1 : wert2
    

    Der Operator wertet zuerst 'bedingung' aus - wenn das true* ergibt, berechnet und liefert er wert1, andernfalls wert2.

    *bzw. irgendeinen Wert ungleich 0.



  • if(bedingung)
      x = 1;
    else
      x = 0;
    

    wäre

    x = bedingung ? 1 : 0;
    


  • Hi Danke,

    das ging ja Turbo- schnell 😃
    Gut, ist eher ein Werkzeug, ein paar Zeichen zu sparen 💡 ... also nicht aus der Kategorie überlebensnotwendig 😉

    Und wo wir schonmal dabei sind:

    Ich habe mal einen Statemachinegenerator bei sourceforge gefunden, der für mich unverständlichen Code erzeugt hat, weil da Mehrfach- Doppelpunkte erzeugt wurden also "irgendwas::wasanderes".
    In welchem Kontext ist sowas zulässig und wie kann man das nutzen? 😕

    Ich glaube, dann wäre auch das letzte C- Rätsel für mich gelöst (außer der eigenen Blödheit natürlich 😉 ).

    Nochmals Danke
    😃



  • pointercrash() schrieb:

    Ich habe mal einen Statemachinegenerator bei sourceforge gefunden, der für mich unverständlichen Code erzeugt hat, weil da Mehrfach- Doppelpunkte erzeugt wurden also "irgendwas::wasanderes".
    In welchem Kontext ist sowas zulässig und wie kann man das nutzen? 😕

    Das gibts in C nicht, das war C++.



  • pointercrash() schrieb:

    Gut, ist eher ein Werkzeug, ein paar Zeichen zu sparen 💡 ... also nicht aus der Kategorie überlebensnotwendig 😉

    nee, eher aus der Kategorie "Praktisch", da der conditional operator einen Wert hat im Gegensatz zu einem if-Statement

    int func();
    _Bool x = 0;
    // ...
    int i = x ? 10 : func();
    


  • Hi Rüdiger,

    heißt das, daß man den Operator zur Initialisierung der Variablen einsetzen kann?
    Das wäre in der Tat praktisch ...



  • Ja, kannst du - oder auch, um recht kurz sehr kryptische Anweisungen zu produzieren 😃

    Was die :: angeht, das wird in C++ verwendet, um Bezeichner in Namensräume oder Klassen einzuordnen.


Anmelden zum Antworten