Abfrage Rückgabewerte?



  • if (foo() == ACK_FAIL)
    		std::cout << "ACK_FAIL" << std::endl;
    	else if (foo() == TIMEOUT)
    		std::cout << "TIMEOUT" << std::endl;
    	else
    		std::cout << "WTF" << std::endl;
    

    Das geht nicht doppel Aufruf von foo(). Mir ist klar das ich den Wert davor in eine var schreiben kann. Aber was ist die kürzeste Lösung dafür und beste?

    Gruß



  • taaaada schrieb:

    if (foo() == ACK_FAIL)
    		std::cout << "ACK_FAIL" << std::endl;
    	else if (foo() == TIMEOUT)
    		std::cout << "TIMEOUT" << std::endl;
    	else
    		std::cout << "WTF" << std::endl;
    

    Das geht nicht doppel Aufruf von foo(). Mir ist klar das ich den Wert davor in eine var schreiben kann. Aber was ist die kürzeste Lösung dafür und beste?

    Gruß

    Ich bin verwirrt, wieso soll das nicht gehen?



  • Weil foo() beim zweiten Aufruf ein anderes Ergebnis als beim ersten liefern könnte.



  • Müll.



  • switch(MY_VALUE)
    {
    case ACK_FAIL: {std::cout << "ACK_FAIL" << std::endl;} break;
    case TIMEOUT : {std::cout << "TIMEOUT" << std::endl;} break;
    default: {std::cout << "WTF" << std::endl;}
    }
    

    Dann so?
    ACK_FILE und TIMEOUT sind doch bestimmt enums, oder?

    Ansonsten ist mir nicht klar warum foo() zweimal hintereinander etwas anderes zurückgeben soll.
    Es sei denn es sind mehrere Threads im Spiel und dann kannst du dich auf das was da zurückkommt ohne lock sowieso nicht verlassen.



  • Ruvi schrieb:

    switch(MY_VALUE)
    {
    case ACK_FAIL: {} break;
    case TIMEOUT : {} break;
    }
    

    Dann so?
    ACK_FILE und TIMEOUT sind doch bestimmt enums, oder?

    Ansonsten ist mir nicht klar warum foo() zweimal hintereinander etwas anderes zurückgeben soll.
    Es sei denn es sind mehrere Threads im Spiel und dann kannst du dich auf das was da zurückkommt ohne lock sowieso nicht verlassen.

    Was ist, wenn z.B. irgendeine Netzwerkabfrage gemacht wird?



  • Jodocus schrieb:

    Was ist, wenn z.B. irgendeine Netzwerkabfrage gemacht wird?

    Ja, dann könnte es natürlich vorkommen, allerdings kannst du dich auch in dem Fall nicht darauf verlassen.
    Der Drucker kann auch ausgestöpselt werden nachdem du fragst ist der Drucker da?

    Von daher könnte man die philosophische Frage stellen, warum vorher überhaupt fragen, ob der Drucker da ist, wenn man den Fall sowieso behandeln muss, dass der Drucker zwischen Frage und Aktion oder während der Aktion nicht mehr reagiert/da ist?

    Es wäre auf jedenfall hilfreich zu wissen in welchem Kontext die Funktion foo() aufgerufen wird und was sie genau zurückgibt. Bzw. was die eigentliche Frage ist.



  • Vielleicht dauert es auch einfach ewig foo() zu berechnen?



  • Nathan schrieb:

    Vielleicht dauert es auch einfach ewig foo() zu berechnen?

    Vielleicht löst ein zweimaliges Aufrufen von foo() auch eine katastrophale Sequenz von Ereignissen aus die zur Zerstörung der Menschheit führen.

    Who knows. :p


Anmelden zum Antworten