Was ist der Unterschied zwischen c beide Texte
-
@Swordfish sagte in Was ist der Unterschied zwischen c beide Texte:
for (size_t j = 0; j < s && cabs(s1) <= 7.0; ++j) {
und all Deine Probleme sind gelöst. Ohne
goto
.Leider falsch,
hier wird eine lokale Variable (auch bei einem Flag) in den Schleifenkopf gezogen und so deren Lokalität zerstört. Das hat bei parallelisierten Schleifen verheerende Folgen.Ersetzt man die zentrale Schleife mit so einer Schleife (OpenMP parallelisiert), sieht man schnell, dass Flags bzw. Testen nicht sinnvoll ist. Mit einer anderen Parallelisierung (pthreads o.ä.) gibt's die gleichen Probleme.
#pragma omp parallel for default(none) shared(A,B,C) for (size_t i = 0; i < s; ++i) { for (size_t j = 0; j < s; ++j) { double complex sl = cnull; for (size_t k = 0; k < s; ++k) { sl += A[indx(i,k,s)] * B[indx(k,j,s)]; } if (cabs(sl) > 7.0) goto outer_loop; C[indx(i,j,s)] = sl; } outer_loop: nop(); }
-
@Wade1234 sagte in Was ist der Unterschied zwischen c beide Texte:
sollte man im hauptprogramm überhaupt keine direkten anweisungen haben
Weshalb sollte ich in kurzen compilierbaren Beispielen noch mehr Indirektionen einbauen? Es ist kein realer Code sondern soll nur einen Effekt zeigen. Es ist schon Luxus, dass das ganze übersetzbar ist und als Programm ausführbar ist.
-
@john-0 sagte in Was ist der Unterschied zwischen c beide Texte:
Es ist schon Luxus
Das ist kein Luxus sondern erwarteter Mindeststandart.
@john-0 sagte in Was ist der Unterschied zwischen c beide Texte:
parallelisierten Schleifen
Hast Du mit keinem Wort vorher erwähnt. Auch dafür gibt es Lösungentm.
-
@Swordfish sagte in Was ist der Unterschied zwischen c beide Texte:
Hast Du mit keinem Wort vorher erwähnt. Auch dafür gibt es Lösungentm.
Weshalb so eine ideologische Einstellung zum Thema
goto
? Es gibt gute Gründe es außerhalb der Schleifenproblematik und des Error-Handlings in C nicht mehr zu nutzen. Aber wie Du siehst, hat die zwanghafte Vermeidung vongoto
Seiteneffekte, die sehr hässlich werden können. Weshalb diese dogmatische Haltung zu diesem Thema?
-
hatten wir das mit dem ausstieg aus den schleifen bzw. sofortiger fehlerbehandlung nicht schonmal? für jede schleife eine funktion und wenn fehler auftreten, wird die funktion einfach mit fehlercode verlassen und die übergeordnete funktion "weiß bescheid".
-
@Wade1234 sagte in Was ist der Unterschied zwischen c beide Texte:
hatten wir das mit dem ausstieg aus den schleifen bzw. sofortiger fehlerbehandlung nicht schonmal?
das hatten wir schon x-mal.
-
@Swordfish
Ja aber ich meinte damit, dass speziell wir drei uns vor einem Monat oder so bereits darüber unterhalten haben, dass man bei verschachtelten Schleifen und Fehlerbehandlung eben kein goto braucht und im Regelfall ändern sich Prinzipien nicht alle 4 Wochen......