URL: https://www.overclockers.at/coding-stuff/solved-c-variable-function1-function2_241405/page_1 - zur Vollversion wechseln!
in meinem code habe ich einige stellen an denen ich 2 funktionen aufrufe und deren return- werte mit || "verodere".
ich würde den code gerne auf 1 zeile reduzieren, ähnlich wie:Code: CPPbool moving_; moving_ = accel_stepper_x_->run(); moving_ |= accel_stepper_y_->run();
das funktioniert leider nicht wie gewünscht. wenn accel_stepper_x_->run() true returned, wird accel_stepper_y_->run() gar nicht erst aufgerufen; das passiert erst wenn accel_stepper_x_->run() false returned.Code: CPPmoving_ = (accel_stepper_x_->run() || accel_stepper_y_->run());
Zitat von wergorwenn accel_stepper_x_->run() true returned, wird accel_stepper_y_->run() gar nicht erst aufgerufen; das passiert erst wenn accel_stepper_x_->run() false returned.
der gedanke ist mir auch gerade gekommen. mein problem war dass beide funktionen ausgeführt werden müssen.
bitweises ODER macht genau was ich will
danke, gelöstCode: CPPmoving_ = (accel_stepper_x_->run() | accel_stepper_y_->run());
Jep, "|" führt in jedem Fall beide Funktionen aus. Aber wenn eine Funktion eigentlich nur einen boolschen Wert berechnen soll, in dem Minibeispiel aber ausgeführt werden muss, sieht das designtechnisch nicht 100% sauber aus (no offense, kenne ja auch nicht den restlichen Code nicht).
Aber schön, dass es nun läuft
in diesem fall:
ich will 2 schrittmotoren gleichzeitig bewegen. die funktion run() bewegt einen schrittmotor und returned true, wenn sich der motor bewegt (dh. das eingestellte ziel noch nicht erreicht hat). ich will in moving_ speichern, ob sich zumindest einer der schrittmotoren bewegt.
Hmm okay, scheint auf den ersten Blick nicht offensichtlich schlecht zu sein von der Denkweise. Wenn du in keine Probleme rennst, würd ichs einfach mal so lassen
Scheint problemlos zu funktionieren. Kann man das noch besser machen? Bin für alle vorschläge offen
Ich würde vllt zwei Methoden erstellen, eine "run"- und "arrivedAtDestination"-Methode. Die run-Methode würde nen bool setzen setzen, wenn das Ziel erreicht ist, wärend die arrivedAtFestination-Methode diesen bool zurück gibt. So sind die zwei Sachen unabhängig von einander, was ihmo "schöner" ist. Aber wenns z.B. für ne Übung in der Uni ist, würde ich mir da nicht den Kopf darüber zerbrechen
Es passt schon. Es ist garantiert, dass mit || der zweite Aufruf nicht stattfindet, wenn der erste schon true liefert. Ebenso ist garantiert, dass mit | beide Aufrufe stattfinden.
Den bitwise operator | würde ich für eine logische Operation nicht verwenden. Es funktioniert zwar mit den meisten Compilern, aber auch nur deswegen, weil "false" als 0 und "true" als 1 implementiert ist.
D.h. wenn du den bitwise operator für so etwas verwendest, verlässt du dich auf ein Implementationsdetail des Compilers.
Ich finde das hier eleganter und lesbarer, und es wird ziemlich sicher noch vom Compiler optimiert:
Code: CPPbool const movingHorizontal = accel_stepper_x_->run(); bool const movingVertical = accel_stepper_y_->run(); bool const moving = movingHorizontal || movingVertical;
Zitat von PuhBärDen bitwise operator | würde ich für eine logische Operation nicht verwenden. Es funktioniert zwar mit den meisten Compilern, aber auch nur deswegen, weil "false" als 0 und "true" als 1 implementiert ist.
D.h. wenn du den bitwise operator für so etwas verwendest, verlässt du dich auf ein Implementationsdetail des Compilers.
Zitat von PuhBärIch finde das hier eleganter und lesbarer, und es wird ziemlich sicher noch vom Compiler optimiert:Code: CPPbool const movingHorizontal = accel_stepper_x_->run(); bool const movingVertical = accel_stepper_y_->run(); bool const moving = movingHorizontal || movingVertical;
Zitat von RingdingNein, das ist so definiert. Es muss genau so implementiert sein.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025