AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

switch, break, case c++

Ein Thema von EWeiss · begonnen am 27. Aug 2017 · letzter Beitrag vom 28. Aug 2017
Antwort Antwort
Seite 5 von 6   « Erste     345 6      
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#41

AW: switch, break, case c++

  Alt 28. Aug 2017, 09:39
Und noch mal der Vollständigkeithalber:

"{" und "}" dienen nur der Lesbarkeit, können also weggelassen werden.

"break" dient dem Abschluß eines Zweiges einer Switch..Case;

"break" kann im letzten case-Zweig auch weggelassen werden.

Wird "break" mittendrinn weggelassen, so werden die weiteren case's ausgeführt, bis ein break kommt oder
die Switch-Anweisung zuende ist;

Beispiele:

Code:
   switch(x){
      case 1: b=0;c=0;break;
      case 2: b=1;c=1;break;
   }
Code:
   switch(x){
     case 1: b=0;c=0;break;
     case 2: b=1;c=1;break;
     default: b=99;c=99;
   }
Spezialfälle:

Code:
   switch(x){
     case 1: b=0;c=0;
     else b=1;c=1;
     default: b=99;c=99;
   }
Ergebnis wär in dem Fall b=99 und c=99, da die Case nicht abegeschlossen wird (mit break);

Ich hoffe ich konnte dir eine bringen
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#42

AW: switch, break, case c++

  Alt 28. Aug 2017, 09:43
"{" und "}" dienen nur der Lesbarkeit, können also weggelassen werden.
Sorry, aber das ist so nicht richtig! Die geschwungenen Klammern definieren einen Scope, der für die Lebensdauer von Variablen äußerst wichtig ist (Stichwort RAII). Ob sie weggelassen werden können oder nicht hängt also sehr stark vom Kontext ab!
Manuel Pöter
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#43

AW: switch, break, case c++

  Alt 28. Aug 2017, 09:49
hmm...kann sein. Da ich in C++ usw. genauso programmier wie in Delphi, deklariere ich keine Variablen mittem im Code. Damit is mir das bisher nicht aufgefallen
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#44

AW: switch, break, case c++

  Alt 28. Aug 2017, 09:52
Zitat:
deklariere ich keine Variablen mittem im Code
Das ist aber ein großer Vorteil gegenüber Delphi.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#45

AW: switch, break, case c++

  Alt 28. Aug 2017, 10:27
hmm...kann sein. Da ich in C++ usw. genauso programmier wie in Delphi, deklariere ich keine Variablen mittem im Code. Damit is mir das bisher nicht aufgefallen
Damit ignorierst du dann aber eines der wichtigsten Features von C++...!
Manuel Pöter
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#46

AW: switch, break, case c++

  Alt 28. Aug 2017, 10:30
Nein, aus Erfahrung kann ich dir sagen, das das den Code nur Unübersichtlicht macht (insbesondere bei Großen und Komplexen Projekten). Das einzige, das ich kenne, das noch schlimmer ist in der Hinsicht ist PHP. Da musst du noch nicht mal eine Variable deklarieren. Du verwendest sie einfach. Wenn du dann noch im Team mit 5 Leuten arbeitest....
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#47

AW: switch, break, case c++

  Alt 28. Aug 2017, 10:34
Noch einen gutgemeinten Style Hinweis für solche API Programme:

- so ewig lange und auch noch verschachtelten "Endlos Switch/Case" lässt man nicht auf Dauer so im Code
- Microsoft empfahl früher MessageBreaker(Makros samt TypeCasts für weitere Nachrichtenbehandlung mit/in einzelnen "TypSicheren" Einzelfunktionen)
- ich habe es stets selbst gemacht und bin es mehr logisch funktional angegangen... also "HandleMenuMessages(...)" "HandleControlMessages(...)" "HandleScrollMessages(...)" "HandlePaintMessages(...)"...
- mein Haupt "switch" und mein innerer WMCOMMAND "switch" bestehen im ReleaseProgramm stets nur aus "case" mit "HandleXXX(...)" Aufrufen.
- ich hatte mir angewöhnt nach dem Haupt "switch" in der FensterFunktion wenn LogDebugInfo nicht voll deaktiviert, dort immer GetLastError zu prüfen und wenn was anliegt dies mit TimeStamp und samt den 4 Übergabeparametern der Fensterfunktion zu loggen... das ja mir jahrelang so gereicht um alles einigermaßen sauber(=ohne da noch ständig nicht bearbeitete LastErrors") zu verarbeiten

Klar gibt es auch Exeptions mit denen man um sich werfen kann, aber das Konzept der WinAPI beruht nunmal mehr auf RückgabeCodes und GetLastError.. für weitere Details, und das funktioniert mit etwas mehr Handarbeit durchaus garnicht so schlecht

Geändert von mensch72 (28. Aug 2017 um 10:36 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#48

AW: switch, break, case c++

  Alt 28. Aug 2017, 10:38
Nein, aus Erfahrung kann ich dir sagen, das das den Code nur Unübersichtlicht macht (insbesondere bei Großen und Komplexen Projekten). Das einzige, das ich kenne, das noch schlimmer ist in der Hinsicht ist PHP. Da musst du noch nicht mal eine Variable deklarieren. Du verwendest sie einfach. Wenn du dann noch im Team mit 5 Leuten arbeitest....
Ich sehe einen großen Gewinn dabei vor allem dann wenn es um globale Variablen geht.
Die den Speicher mitunter an verschiedenen stellen sehr schnell mal eben so überschreiben.

Bei solchen Konstellationen
Code:
{
  long x = 0;
  x += + 10;
}
Ist X nur solange definiert\gültig wie man sich innerhalb der Schleife befindet.
Der Speicher wird also mit der Variable X nicht überschrieben.

Bei einer globalen Definition ist es sehr schwer bei überschriebenen Speicher den Fehler nachher zu finden.
Aber gut jeder wie er will.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#49

AW: switch, break, case c++

  Alt 28. Aug 2017, 10:54
Nein, aus Erfahrung kann ich dir sagen, das das den Code nur Unübersichtlicht macht (insbesondere bei Großen und Komplexen Projekten). Das einzige, das ich kenne, das noch schlimmer ist in der Hinsicht ist PHP. Da musst du noch nicht mal eine Variable deklarieren. Du verwendest sie einfach. Wenn du dann noch im Team mit 5 Leuten arbeitest....
Also ich arbeite seit ~9 Jahren beruflich hauptsächlich mit C++ und kann aus meiner Erfahrung sagen, dass es nicht unübersichtlicher ist, im Gegenteil. Nicht nur, dass Definition und Verwendung nahe beieinander liegen (bessere Lokalität), es ist eben auch für RAII extrem wichtig. Und RAII ist eines der wichtigsten Konzepte in C++ - wenn man modernes C++ schreibt (speziell seit C++11) werden Resourcen nicht explizit verwaltet, so wie in Delphi mit try-finally, sondern eben über Wrapper-Klassen mit Destruktoren und RAII.
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#50

AW: switch, break, case c++

  Alt 28. Aug 2017, 12:15
Noch ein kleiner Tipp von mir: Ich würde die teilweise sehr langen Codeblöcke in sprechend benannte Funktionen auslagern. Dann wird deine ganze switch/case Konstruktion auch übersichtlicher. Und du siehst am Funktionsnamen, was an der Stelle passiert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 6   « Erste     345 6      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz