Zwei Jahre C++ und immernoch keine Ahnung :)
-
@Swordfish sagte in Zwei Jahre C++ und immernoch keine Ahnung :
@Bushmaster sagte in Zwei Jahre C++ und immernoch keine Ahnung :
die stl ist ein beispiel dafür, dass echte c++profis sich einen dreck um guten programmierstil scheren.
So ein Quatsch. Ist ein Beispiel dafür daß es nicht einfach sich in große Projekte einzuarbeiten.
deine worte:
"die Dinkumware-STL ist grauenhaft zu lesen. Auch wenn man mal von den nötigen __ absieht, es wimmelt vor Makros und miesen Bezeichnern"was hat das mit großen projekten zu tun?
-
@Wade1234 sagte in Zwei Jahre C++ und immernoch keine Ahnung :
also zum glück kann du mit c++ auch c-programme schreiben.
nur bedingt.
char* p = "hallo";
ist in c normal, aber in c++ ein fehler
-
@Bushmaster sagte in Zwei Jahre C++ und immernoch keine Ahnung :
ist in c normal, aber in c++ ein fehler
aber
const char *p = "hallo"; char *str = (char *) malloc(1234);
ist ja kein ungültiges c, oder?
-
@Wade1234 sagte in Zwei Jahre C++ und immernoch keine Ahnung :
@Bushmaster sagte in Zwei Jahre C++ und immernoch keine Ahnung :
ist in c normal, aber in c++ ein fehler
aber
const char *p = "hallo"; char *str = (char *) malloc(1234);
ist ja kein ungültiges c, oder?
ungültig ja nicht, aber der c-coder macht sowas nicht. der type-cast ist zeile 2 ist definitiv verpönt. die begründung dafür weiß ich aber nicht mehr.
edit: hier steht es: https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc
-
@Bushmaster aber der c++-programmierer macht das ja so bzw. kann es zumindest so machen.
-
@Wade1234 sagte in Zwei Jahre C++ und immernoch keine Ahnung :
@Bushmaster aber der c++-programmierer macht das ja so bzw. kann es zumindest so machen.
ja, aber dann gibt es mecker von anderen mitgliedern seiner zunft.
-
@Bushmaster sagte in Zwei Jahre C++ und immernoch keine Ahnung :
die begründung dafür weiß ich aber nicht mehr.
Weil es in C mal erlaubt war Funktionen zu verwenden ohne daß der Compiler zuvor eine Deklaration gesehen hat. Es wurde dann eine Funktion mit unbestimmter Parameterzahl angenommen die einen
int
zurückgibt. Entspricht nun die Breite einesvoid*
zufällig nicht der einesint
kann's boom machen.@Bushmaster sagte in Zwei Jahre C++ und immernoch keine Ahnung :
was hat das mit großen projekten zu tun?
Grauenhafte Bezeichner für Leute die mit dem Projekt nicht vertraut sind bzw. nicht wissen was sich die Entwickler so denken. Man kommt mit der Zeit schon d'rauf und kann auch verstehen daß bei der komplexität eher kurze Bezeichner gewält wurden. Makros sind bei manchen Dingen noch notwendiges Übel.
@Wade1234 sagte in Zwei Jahre C++ und immernoch keine Ahnung :
aber der c++-programmierer macht das ja so bzw. kann es zumindest so machen.
wth?
auto p{ "hello" }; std::vector<char> foo(1234, 0); // oder vllt. besser: std::string bar(1234, 0);
-
@Swordfish und wie würdest du die funktion
ssize_t read(int fd, void *buf, size_t count);
aufrufen?
-
Auf jeden Fall ohne vorheriges:
const char *p = "hallo"; char *str = (char *) malloc(1234);
-
@Wade1234 mit einem filedescriptor (der natürlich von einer RAII-Klasse gehalten wird), dem Pointer auf das erste Element eines
std::vector
s und dersize()
desstd::vectors
. Oder eben von einemstd::array
dasselbe. Wie denn Du!?Ne, nicht wirklich, ich würde
istream::read()
nehmen, dann wäre "mit einem filedescriptor (der natürlich von einer RAII-Klasse gehalten wird)" schonmal abgehakt.Bist Du sehr enteuscht wenn ich Dir sage daß aufgrund vieler Deiner Aussagen darauf zu schließen ist daß Du hauptsächlich grottiges C++ schreibst? Das ist nicht als Beleidigung gemeint sondern eher als Anstoß Dir mal moderne Literatur anzusehen.
-
@Wade1234 sagte in Zwei Jahre C++ und immernoch keine Ahnung :
@Swordfish und wie würdest du die funktion
ssize_t read(int fd, void *buf, size_t count);
aufrufen?auto read_result = read( MySocketHandle, (char*)MyStringSocketBuffer.data(), MyStringSocketBuffer.size() );
Auch bei C-APIs, egal ob Posix oder WinAPI, kann man mit STL-Containern arbeiten. Dabei ist unerheblich ob man in dem Fall einen std::string oder einen std.:vector verwendet.
-
die doku sagt jetzt zu size folgendes:
Returns the length of the string, in terms of bytes.
This is the number of actual bytes that conform the contents of the string, which is not necessarily equal to its storage capacity.
sehe ich das richtig, dass ich gar nicht weiß, welche datenmenge da eigentlich maximal transportiert wird? gerade bei sockets sollte man ja schon größere datenmengen verschicken. irgendwie ist das kompliziert.
@Swordfish sagte in Zwei Jahre C++ und immernoch keine Ahnung :
Bist Du sehr enteuscht wenn ich Dir sage daß aufgrund vieler Deiner Aussagen darauf zu schließen ist daß Du hauptsächlich grottiges C++ schreibst? Das ist nicht als Beleidigung gemeint sondern eher als Anstoß Dir mal moderne Literatur anzusehen.
ich habe sogar moderne literatur da. weil diese allerdings geschätzt 4-mal so dick ist, wie die "moderne" c-literatur, ist es beim ansehen geblieben.
-
Ich kann dem Treadersteller nur raten sich mal in der open source Welt umzusehen. Es gibt unzählige Projekte, die an chronischem Entwicklermangel leiden. Ich habe ein paar Jahre bei LMMS entwickelt. Als ich dort angefangen habe, hatte ich fast gar keine Ahnung von C++ und Qt. Man lernt in so einem Projekt eine ganze Menge :
- der Umgang mit Git und github
- sauberen Code schreiben
- fremden Code lesen und verstehen
- das Arbeiten im Team (sich unter zu ordnen und seine Eitelkeiten zurückzustellen)
Open source Projekte sind oft neuen Entwicklern sehr aufgeschlossen und helfen dabei, sich einzuarbeiten. Mir hat es sehr viel gebracht. Es ist einfach ein tolles Gefühl, wenn dein Pull Request zum Projekt gemerged wird und du weißt, dass jetzt tausende Menschen von deinem Code profitieren.
Außerdem hat man immer etwas vorzuweisen, falls mal ein potenzieller Arbeitgeber etwas sehen möchte.
-
Das ist auch genau das was ich möchte. Ich bin am überlegen für KDE mit zu entwickeln. Dort könnte ich mich anschließen, komme auch mit Git etc in Berührung und bekomme hoffentlich gesagt wenn ich Fehler, Bugs etc. in meinem Code habe.
-
@Zhavok sagte in Zwei Jahre C++ und immernoch keine Ahnung :
Ich bin am überlegen für KDE mit zu entwickeln.
Danke für die Warnung ... äh ... Info.
-
Für dich entwickle ich auch gern was für Windows @Swordfish
-
@Zhavok
Kannst dir auch ein hübsches eigenes Projekt suchen. Ich habe mir z.B. einen "Lego-Eisenbahn-Rundkurs-generator" gebaut, für die Kinder natürlich .keinesfalls für michSzenario: man hat z.B. 25 Kurven eines bestimmten Radius, dazu 15 Geraden und soll einen Rundkurs generieren unter Verwendung möglichst vieler Gleise.
- Erweiterung: Verwendung von Weichen
- Erweiterung: grafische Darstellung des Rundkurses ( z.B. QT )
Und zwecks Qualitätskontrolle kannst du ja hier jederzeit Quellcode posten. Oder fragst jemanden ob du ihm Quellcode schicken kannst.
-
Das könnte man schon machen. Aber zum einen kann ich mich nicht auf unendliche Geduld hier verlassen, denn nach 3 Fragen zu dem Thema wird das langweilig für die Leser, zum anderen möchte ich gerne lernen im Team zu arbeiten. Auch wegen Git etc.. Ich denke die Idee mit KDE ist garnicht so schlecht. Es ist ein schönes Gefühl mit anderen zusammen an einem großes Projekt zu schreiben. Ich denke auch, dass dann Tools an denen ich mitgewirkt habe eher zur Anwendung kommen als die Eisenbahn. Denn heutzutage sind die Kids einfach eine ganz andere Qualität von Spielen gewohnt. Aber trotzdem danke, das war kein schlechter Einfall.
-
@Zhavok sagte in Zwei Jahre C++ und immernoch keine Ahnung :
im Team zu arbeiten. Auch wegen Git
Git -oder was auch immer- ist auch absolut sinnvoll, wenn du alleine vor dich wurschtelst.
-
@Jockelx sagte in Zwei Jahre C++ und immernoch keine Ahnung :
Git -oder was auch immer- ist auch absolut sinnvoll, wenn du alleine vor dich wurschtelst.
stimmt. schon deshalb, weil man einen funktionierenden stand wieder herstellen kann, wenn man zu viel zerwurschtelt hat.
ide wie visual studio, intellij idea und netbeans haben eine git (und github) unterstützung schon eingebaut.