Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

1

17.12.2013, 21:24

C++ State of the Art

Jeder hat ja so seinen eigenen Coding-Stil und ebenso eine eigene Art bei den Namen von allen Dingen(Klasse, Variablen ...).

Nun interessiert mich, was eigentlich so "State of the Art" ist. Welche Namenskonventionen benutzen die grossen Firmen und Programmiergötter?
Was für Sachen werden benutzt und welche nicht?

Es geht mir hier einerseits um alle Namen von allen Sachen
Bsp:ein C vor dem Namen einer Klasse oder nicht? Pointer mit "p_Name"? und und und

Aber auch um Fragen wie: (aus einem anderen Thread von mir) welche Container benutzt man überhaupt noch? Welche Dinge aus alten Standards benutzt man seit C++11 nicht mehr?

Da muss es ja gewisse Standards geben, die von besagten Firmen genutzt werden, oder die einfach mittlerweile so selbstverständlich sind?Vielleicht sogar auf Dokumenten zusammen gefasst?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ERROR« (17.12.2013, 21:41)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

17.12.2013, 21:27

Bei uns ist ein _ vor private Member-Variablen einer Klasse üblich. Ansonsten PascalCase. Das ist alles. Kein "p", kein "m", keine Datentypen, nichts. Viele verwenden auch überhaupt kein Präfix.
Ungarische Notation ist nicht mehr modern, seit einer ganzen Weile. Man bezeichnet es sogar als Code-Smell.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

18.12.2013, 00:05

Mich würden Guidelines zur Verwendung von neuen Features wie z.B. auto interessieren.
An vielen Stellen kann man das aus Faulheit schreiben, aber wirklich nötig ist es nur ganz selten.

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

4

18.12.2013, 00:08

Von dem was ich so mitbekomme, sollte man sich gar nicht an Grossfirmen oder ähnlichem orientieren, denn insbesondere bei grossen Firmen werden Abläufe standardisiert und bis zum geht nicht mehr getestet (auch bekannt als Qualitätskontrolle). Dies hat Vorteile, wie z.B. kompatible Prozesse zwischen unabhängigen Gruppen und Stabilität der verwendeten Software, aber es bringt eben auch grosse Hindernisse mit sich. Man kann nicht einfach von einem Tag auf den anderen etwas am Stil ändern oder sich einmal den neusten Kompiler holen, sondern dies muss alles über lange Umwege wieder geprüft und standardisiert werden und somit passiert es dann oft, dass Firmen über Jahre nicht auf neuere Technologien umsteigen, was dann eben wiederum dazu führt, dass viele Grossfirmen schreckliche Coding Styles und Guidelines haben und von C++11 nur träumen können.

Im Gesamten gesehen werden dir alle Leute mit etwas modernerem C++ sagen, dass man niemals ungarische Notation verwenden soll. Eine weitere "Regel" die sich in vielem Code wieder findet ist, dass man Klassen mit einem grossen Anfangebuchstaben schreibt. Ansonsten ist das Meiste ziemlich Geschmackssache ob man nun CamelCase oder camelCase oder standard_like verwendet und ob man nun m_ oder _ oder gar kein prefix für Membervariabeln verwendet.

"State of the Art" Coding Styles gibt es nicht - ausser du würdest den Standard als "State of the Art" bezeichnen, dann kannst du Mal bisschen durch die C++ Referenz browsen.

Aber auch um Fragen wie: (aus einem anderen Thread von mir) welche Container benutzt man überhaupt noch? Welche Dinge aus alten Standards benutzt man seit C++11 nicht mehr?
Das kommt sehr auf den Code drauf an. Wenn man mit alten Code arbeitet, wird selten das ganze Projekt refactored, also bleibt da noch so ziemlich alles beim Alten. Containers werden meiner Erfahrung nach immer noch gleich eingesetzt, evtl. kann man ein paar maps durch unordered_maps ersetzen - die Grundlagen der Programmierung lösen sich ja nicht einfach so auf. Der einzige "Container" welcher so zu sagen "deprecated" ist, ist das normale statische C Array, das wurde nämlich mit C++11 durch std::array "ersetzt", leider haben das bis jetzt nur wenige bemerkt.
Einer der wichtigsten Änderungen mit C++11 ist die "Abschaffung" von Manuellem Memory Management - new/delete Paare sind jetzt mit sehr, sehr, sehr wenigen Ausnahmen nicht mehr erwünscht. Stattdessen haben wir jetzt Smart Pointers, wie std::unique_ptr, std::shared_ptr und std::weak_ptr, welche über RAII die Probleme von Memory Leaks so ziemlich auf Null reduzieren.

"Best Practice" für C+11 gibt es schon einige Artikel, aber wie C++11 über längere Zeitspannen zu verwenden ist, wird wohl noch einige Jahre unklar bleiben, schliesslich ist der Standard noch jung und wird noch nicht einmal komplett von allen Kompilers unterstützt.

Mich würden Guidelines zur Verwendung von neuen Features wie z.B. auto interessieren.
An vielen Stellen kann man das aus Faulheit schreiben, aber wirklich nötig ist es nur ganz selten.
Ja da hab ich mich auch schon etwas gefragt. Ich persönlich würde auto wohl nur für kurzlebige temporäre Variabeln verwenden. Wobei es natürlich sehr auf die Situation darauf ankommt...
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

18.12.2013, 01:10

auto ist vor allem ein Komfortfeature. Insbesondere im Zusammenhang mit Templates kann es aber unglaublich praktisch sein, z.B. wenn man ansonsten Typen irgendwie über extrem komplizierte Hilfkonstrukte ermitteln müsste, nur damit man die passende Deklaration hinschreiben kann. Das eine C++11 Feature, das wirklich die Sprache an sich fundamental verändert hat, sind imo rvalue References.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

18.12.2013, 08:17

Mich würden Guidelines zur Verwendung von neuen Features wie z.B. auto interessieren.
An vielen Stellen kann man das aus Faulheit schreiben, aber wirklich nötig ist es nur ganz selten.

In C# gilt bei uns überall var zu verwenden. Es reduziert den Noise und erlaubt vor allem auch Austausch des Datentyps in einem Refactoring ohne dass sich gleich der gesamte Code vor lauter Fehlern wild rot umfärbt. Ich glaube auch nicht, dass es nur unbedingt was mit Bequemlichkeit zu tun hat. Eine Variable muss den Zweck über ihren Namen eindeutig genug nach außen transportieren. Dabei ist der Typ an sich nicht mal immer wirklich relevant.
Was ist besser lesbar?
std::map<std::string,mf::foobar<bf::string>>::iterator it = myMap.begin();
oder
auto iterator = begin(myMap);
Ich finde eindeutig letzteres. In C# ähnlich:

C#-Quelltext

1
2
3
4
5
SpecialView.MyFreakyCommandHandler handler = OnOpenFile;
if(handler!=null)
    handler(this);
foreach(IModelSomething.Type t in types)
    call(t);
vs

C#-Quelltext

1
2
3
4
5
var handler = OnOpenFile;
if(handler!=null)
    handler(this);
foreach(var type in types)
    call(type);
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (18.12.2013, 08:24)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

18.12.2013, 10:35

Ich benutze auto mittlerweile gerne wie folgt:

auto v = std::vector<int>(42);

anstatt

std::vector<int> v(42);

In der zweiten Variante geht der Name der Variablen irgendwie unter, und man könnte es mit einem Funktionsaufruf verwechseln. Ich fand es schon immer doof, dass man dem Konstruktor bei der Erzeugung eines Objekts auf dem Stack auf andere Art die Parameter übergibt als bei der Erzeugung mit new. Mit auto geht es nun einheitlich, ohne dass man den Typ zweimal hinschreiben muss.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

18.12.2013, 10:46

Das is ganz nett, stimmt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

18.12.2013, 10:48

Und es erinnert dann stark an C#-structs! (nur das new fehlt ;))

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

18.12.2013, 10:56

Geht halt leider nicht immer so (z.B. bei std::unique_ptr), aber new verwendet man sowieso selten und wenn, dann niemals mehr direkt... :P

Werbeanzeige