Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Sprungmarken?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
05.04.2007, 17:08 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


In C# haben sie das ja zum Beispiel geändert so das man nach jeden Case immer einer break machen muss und ein Fall through nur möglich ist wenn bei einem case kein eigener Code steht.
Das finde ich persönlich ziemlich übertrieben und komme mir dabei zu sehr an die Hand genommen vor.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
05.04.2007, 17:17 Uhr
0xdeadbeef
Gott
(Operator)


Naja, bei C und C++ ist die Philosophie nun schon, dem Programmierer so viel Strick zu geben, wie er haben will. Als Tom Duff auf Duff's Device gekommen ist, gabs auch ne lange Diskussion, bei der am Ende rauskam, ja, das ist ANSI-konformer Code - warum es verbieten? Wems zu unübersichtlich ist, der muss es ja nicht benutzen.

Java, C# und so weiter dagegen richten sich...ich sag mal, an den großgewordenen BASIC-Programmierer. Welchen Ansatz man jetzt bevorzugt, ist letzten Endes Geschmackssache - aber ich für meinen Teil hasse es, vom Compiler bevormundet zu werden. (Daher auch perl > python)
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
05.04.2007, 19:20 Uhr
Suba Esel



@ Guybrush Threepwood (Post 003):
Ich hatte das hier

Zitat von Blubber2063:

Davon abgesehen reichen die "normalen" Kontrollflusstrukuren eingentlich auch ohne explizite Sprungmarken und goto's zu arbeiten.


so verstanden, dass man normale Kontrollstrukturen (if, else) benutzen kann / soll, anstatt gotos, Sprungmarken u.ä. (switch) zu nehmen.


Mal ganz was andres:

C++:
#include <iostream>

int main()
{
    int foo = 2;

    switch(foo)
    {
        case 1:
        std::string bar; // wenn ich hier statt int std::string nehme....
        break;
        default:
        std::cout << "Ups" << std::endl;
    }
}



.... dann bekomm ich folgende Fehlermeldungen:
main.cpp: In function `int main()':
main.cpp:12: error: jump to case label
main.cpp:10: error: crosses initialization of `std::string bar'
main.cpp:12: warning: destructor needed for `bar'
main.cpp:12: warning: where case label appears here
main.cpp:12: warning: (enclose actions of previous case statements requiring destructors in their own scope.)
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
05.04.2007, 19:32 Uhr
Blubber2063



Switch kannst du ruhig benutzen, das sind auch nicht unbedingt direkt Sprungmarken und dein Beispiel funktioniert aus einem einfachen Grund nicht, switch arbeitet nur mit atomaren Datentypen, also int, short, char, float, etc. Das liegt daran das hier eben keine Sprungmarken erzeugt werden sondern eben auch beim switch errechnet wird welcher Fall zutrifft.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
05.04.2007, 19:39 Uhr
Suba Esel



Das hab ich jetzt ehrlich gesagt nicht verstanden. Wieso geht das mit std::string nicht? Wenn ich statt std::string nen eigenen Klassen - Typ benutze, geht das auch.
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
05.04.2007, 21:41 Uhr
Blubber2063



Funktioniert mit Sicherheit nicht zeig doch mal ein Beispiel.
Dieser Post wurde am 05.04.2007 um 21:42 Uhr von Blubber2063 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
05.04.2007, 21:59 Uhr
Kest
saint


Hi!


Zitat:
Funktioniert mit Sicherheit nicht zeig doch mal ein Beispiel.


Mit so 'ner unsinnegen Klasse würde das gehen:


C++:
class A
{
      public:
             A(const int a)
              : current(a) {}
              
             operator int() const{
                      return current;
                      }
              
      private:
              int current;
};


--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
05.04.2007, 22:01 Uhr
Blubber2063



Dann geht das aber nur weil der Compiler hier den autoconvert zum int hinkriegt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
05.04.2007, 22:04 Uhr
Suba Esel



Oder ganz stumpf:

C++:
#include <iostream>

class test
{
    public:
    int blabla;
};

int main()
{
    int foo = 2;

    switch(foo)
    {
        case 1:
        test bar;
        break;
        default:
        std::cout << "Ups" << std::endl;
    }
}



Wenn ich das public wegnehm, bekomm ich wieder das altbekannte jump to case label und das hier:
Code:
main.cpp:15: error:   enters scope of non-POD `test bar'

was ist ein POD?

Mit ner Klasse funktioniert es nur, wenn alles public ist.
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
05.04.2007, 22:47 Uhr
Blubber2063



Nein es funktioniert auch nur wenn eindeutig ist welches Member hier gemeint ist, nimm mal 2 Member und der Compiler wird bestimmt auch meckern, es geht nur um die impizite Konvertierung die das erlaubt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: