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 2 von 6     12 34     Letzte »    
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: switch, break, case c++

  Alt 27. Aug 2017, 09:13
Ich persönlich schreibe im Zweifel den Code einfach so, wie ich denke, dass es stimmen müsste, und verfolge den Ablauf dann schrittweise im Debugger. Dann bin ich auch nicht von Annahmen anderer abhängig
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

AW: switch, break, case c++

  Alt 27. Aug 2017, 09:18
Ich persönlich schreibe im Zweifel den Code einfach so, wie ich denke, dass es stimmen müsste, und verfolge den Ablauf dann schrittweise im Debugger. Dann bin ich auch nicht von Annahmen anderer abhängig
In Delphi kannst du so etwas auch nicht machen.

Delphi-Quellcode:
WM_COMMAND:
  bla;
  bla, bla;
  bla, bla, bla;
das hingegen schon.
Delphi-Quellcode:
WM_COMMAND:
  begin
    bla;
    bla, bla;
    bla, bla, bla;
  end;
Der eine macht es so der andere wieder SO..
Wenn man es dann nicht SO macht wie der andere es macht ist man der Dumme.
Es muss doch ganz klare Richtlinien geben was nun korrekt ist.

Mit so etwas wird man dann darauf hingewiesen..
Zitat:
Also your SWITCH CASE looks very strange to me because of the extra braces.
Nur warum es seltsam aussieht kann niemand erklären weil jeder macht was er will.

EDIT:
Nochmal
Code:
   case 'a' :
        { 
        // Declaration of szChEntered OK. Local scope.
        char szChEntered[] = "Character entered was: ";
        cout << szChEntered << "a\n";
        } 
        break;
   
    case 'b' :
        // Value of szChEntered undefined.
        cout << szChEntered << "b\n";
        break;
   
    default:
        // Value of szChEntered undefined.
        cout << szChEntered << "neither a nor b\n";
        break;
    }

bei case a..
nach Case a Klammer (warum? )
nach Case a abschließende klammer dann break.. so wie ich es mache aber angeblich nicht richtig. (warum? )
Case b keine Klammer (warum? )

was für ein mist!
Im Moment ohne sinn und zweck.. das ganze.

wieder andere machen es so. Berechtigte Frage! Was soll der Quatsch..
Code:
 case 'a' :
        { 
        // Declaration of szChEntered OK. Local scope.
        char szChEntered[] = "Character entered was: ";
        cout << szChEntered << "a\n";
        break;
        }
Das einzige was mir einleuchtet ist das wenn ich eine Klammer setze das diese auch wieder geschlossen werden muss.
Also was ist in meiner WinProc bzg. Switch, break, case falsch? Bitte keine Annahmen sondern begründet!

gruss

Geändert von EWeiss (27. Aug 2017 um 09:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#13

AW: switch, break, case c++

  Alt 27. Aug 2017, 10:02
Im Grunde gehört es wohl eher in einen der CASE/SWITCH-Blöcke, bzw. an deren Ende.
Aber da in C++ ein CASE/SWITCH nur eine Liste von "Einspungspunkten" ist, würde demnach auch alles verarbeitet, was zwischen diesen CASE-Blöcken liegt, wenn man vorher nicht raus springt.
Ich hätte nur erwartet, dass die Syntax von C++ eine Deklaration zwischen den Blöcken verbietet.

Delphi hat dagegen ein implizites BRAKE an jedem CASE-Block und man springt automatisch wieder raus, nach Abarbeitung des einen angspungenen Blocks.


Quatsch:
Damit der Highlighter dir das ENDE des Blocks verrät.
Stell dir SWITCH wie ganz viele GOTO vor. Da brachst du auch kein BEGIN/END dazischen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (27. Aug 2017 um 10:19 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

AW: switch, break, case c++

  Alt 27. Aug 2017, 10:15
Danke..
Aber das beantwortet nicht meine Frage bzg. das letztendlich jeder machen kann was er will.
Und wenn man es tut einem angebliche Fehler vorgeworfen werden.

Was ist denn nun bei meinem Case, Break bei FullScreen falsch.
Wenn ich es doch am ende genauso mache wie bei "Case a"

Code:
        case ID_FULLSCREEN:
         {
             gP.bFullScreen = !gP.bFullScreen;
             SetForegroundWindow(hWnd);
             if (gP.bFullScreen)
             {
                 RECT rect;
                 rect.right = GetSystemMetrics(SM_CXSCREEN);
                 rect.bottom = GetSystemMetrics(SM_CYSCREEN);
                 SetWindowLongPtr(hWnd, GWL_STYLE, WS_POPUP | WS_VISIBLE);
                 AdjustWindowRect(&rect, WS_POPUP, FALSE);
                 MoveWindow(hWnd, 0, 0, rect.right, rect.bottom, FALSE);
             }
             else
             {
                 RECT rect;
                 rect.right = dpi(XMIN_SIZE);
                 rect.bottom = dpi(YMIN_SIZE);
                 rect.left = (GetSystemMetrics(SM_CXSCREEN) - rect.right) / 2;
                 rect.top = (GetSystemMetrics(SM_CYSCREEN) - rect.bottom) / 2;
                 SetWindowLongPtr(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE);
                 AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE);
                 MoveWindow(hWnd, rect.left, rect.top, dpi(XMIN_SIZE), dpi(YMIN_SIZE), FALSE);
             }
         }
         break;
Da blickt niemand wirklich durch.

gruss

Geändert von EWeiss (27. Aug 2017 um 10:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

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

AW: switch, break, case c++

  Alt 27. Aug 2017, 10:24
Ob das break innerhalb der Klammern steht oder nicht macht keinen Unterschied. Die Klammern bilden einen Scope, der die Gültigkeit der darin definierten Variablen beschränkt, genauso wie zb die Klammern bei deinem if-else, wo du wieder zwei Scopes hast in denen jeweils eine "rect" Variable definiert ist.

Warum das break nach ID_FULLSCREEN falsch sein soll kann ich dir auch nicht sagen, aber es gibt durchaus Fälle wo man das break absichtlich weglässt um den Code des nächsten case-Zweiges ebenfalls auszuführen. In deinem Fall wäre das dann eben der case-Zweig von ID_CAPTURE - ob das allerdings Sinn macht kann ich dir so auch nicht sagen...
Manuel Pöter
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#16

AW: switch, break, case c++

  Alt 27. Aug 2017, 10:25
http://en.cppreference.com/w/cpp/language/switch

Das break muss über die letzte schließende Klammer, nicht darunter.
Das wurde aber auch schon erwähnt.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#17

AW: switch, break, case c++

  Alt 27. Aug 2017, 10:28
Ohne jetzt was verbindliches zu sagen:

Ich stelle mit { und } immer als Ersatz für begin und end vor.

Bei einigen Sachen in Delphi benötige ich begin und end zwingend, kann sie aber auch zur Strukturierung an Stellen nutzen, an denen sie nicht zwingend erforderlich sind.

Analog ist es auch mit den {}.
Delphi-Quellcode:
case i of
  1 : Machwas; // Begin und end nicht erforderlich.
  2 : begin // Begin und end nicht erforderlich, schadet aber nicht.
        machwas;
      end;
  3 : begin // Begin und end erforderlich.
        Machwas1;
        Machwas2;
      end;
  else
    AltenativeMachen;
    AltenativeMachen;
    AltenativeMachen;
    AltenativeMachen;
    AltenativeMachen;
  end;
end;
Bei der Else ginge es auch so:
Delphi-Quellcode:
  else
    begin
      AltenativeMachen;
      AltenativeMachen;
      AltenativeMachen;
      AltenativeMachen;
      AltenativeMachen;
    end;
  end;
Kann man so auf C++ übersetzen, nur dass man das break nicht vergessen darf.

Oder irre ich mich da jetzt?

Und ein Fehler ist nur das, was zu einem anderen Programmablauf führt, als beabsichtigt.

Blocks zur besseren Strukturierung einzufügen, egal ob in Delphi mit begin und end oder in C++ durch { und } ist kein Fehler, allenfalls eine Geschmacksache oder ein Programmierstil, aber kein Fehler.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

AW: switch, break, case c++

  Alt 27. Aug 2017, 10:32
http://en.cppreference.com/w/cpp/language/switch

Das break muss über die letzte schließende Klammer, nicht darunter.
Das wurde aber auch schon erwähnt.
Sorry dann sage das MS denn in deren Beispiel ist es nicht So.
Und das wurde auch schon erwähnt.
Siehe case a eines der letzten Beispiele.

Code:
   case 'a' :
         { 
         // Declaration of szChEntered OK. Local scope.
         char szChEntered[] = "Character entered was: ";
         cout << szChEntered << "a\n";
         } 
         break;
Ich kann dir auch Zig Links nennen wo es jedes mal unterschiedlich ist.
Dann müsste nach deiner Annahme das Beispiel in der MSDN falsch sein.

Zitat:
Ich stelle mit { und } immer als Ersatz für begin und end vor.
Habe ich auch bin davon aber sehr schnell von abgekommen weil es anscheinend keine vom Compiler vorgeschriebene Definition für Case Anweisungen gibt
mal abgesehen davon das Klammern geschlossen werden müssen.
Nun wer definiert nun was richtig und was falsch ist.

MSDN, diverse C++ Tutorials die Wiki oder was auch immer.

Zitat:
Fälle wo man das break absichtlich weglässt um den Code des nächsten case-Zweiges ebenfalls auszuführen
Das ist korrekt


gruss

Geändert von EWeiss (27. Aug 2017 um 10:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#19

AW: switch, break, case c++

  Alt 27. Aug 2017, 10:49
Danke..
Aber das beantwortet nicht meine Frage bzg. das letztendlich jeder machen kann was er will.
Quatsch:
Damit der Highlighter dir das ENDE des Blocks verrät.
Stell dir SWITCH wie ganz viele GOTO vor. Da brachst du auch kein BEGIN/END dazischen.
Es ist wie mit roten Ampeln.
Jeder macht was er will.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

AW: switch, break, case c++

  Alt 27. Aug 2017, 10:51
Danke..
Aber das beantwortet nicht meine Frage bzg. das letztendlich jeder machen kann was er will.
Quatsch:
Damit der Highlighter dir das ENDE des Blocks verrät.
Stell dir SWITCH wie ganz viele GOTO vor. Da brachst du auch kein BEGIN/END dazischen.
Es ist wie mit roten Ampeln.
Jeder macht was er will.
Bitte was möchtest du damit jetzt sagen ?
Ernsthaft hilft mir das? Oder jemand anderem der vor dem gleichen Dilemma steht ?

gruss
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    


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 08:47 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