Forum: PC-Programmierung Hinweis: C++ Core Guidelines


von Di P. (drpepper) Benutzerseite


Lesenswert?

Hallo,

ich möchte nur kurz auf folgendes Projekt hinweisen:

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md

Bjarne Stroustrup und Herb Sutter erklären, wie C++ gemeint ist und 
verwendet werden sollte. Sicher kann das mal zu einer ganz brauchbaren 
Richtlinie werden.

Das Projekt ist noch in einem ziemlich frühen Stadium, also bitte etwas 
Nachsicht und Geduld walten lassen.

von AVRJohnny (Gast)


Lesenswert?

Schönes Projekt. Für den "normalen" C++ Programmierer oversized, aber 
das ist natürlich auch nicht der Anspruch hier.

Gibt es so etwas für C? Bekannt wäre mir ähnliches von MISRA und 
PC_lint.

von Di P. (drpepper) Benutzerseite


Lesenswert?

AVRJohnny schrieb:
> Schönes Projekt. Für den "normalen" C++ Programmierer oversized, aber
> das ist natürlich auch nicht der Anspruch hier.

Naja, ich denke, dass auch "normale" C++ Programmierer i.d.R. daran 
interessiert sind, die Sprache bestimmungsgemäß zu verwenden ;).

Für Einsteiger sind die Fragestellungen aber sicher etwas "abstrakt" ;)

> Gibt es so etwas für C? Bekannt wäre mir ähnliches von MISRA und
> PC_lint.

Würde mich auch interessieren.

von Nur die Harten kommen in den Garten (Gast)


Lesenswert?

Das sind keine ratschläge die einem zeigen wie man sein problem löst 
sondern benimm-regel damit einem die Gouvernante nicht auf die Finger 
haut! Bsp:

--
 P.9: Don't waste time or space
Reason

This is C++.
Note

Time and space that you spend well to achieve a goal (e.g., speed of 
development, resource safety, or simplification of testing) is not 
wasted.

--

Jajajaja, jetzt weiss ich genausoviel wie vorher und bekomme Gratis ein 
Schluck schlechtes Gewissen dazu wenn ich bspw. identifier zwei zeichen 
mehr spendiere.

Ich will einen guten rat, einen Hinweis wo der Weg hinführt und keine 
massregelung immer freundlich die Nachbarin zu grüßen.

von Di P. (drpepper) Benutzerseite


Lesenswert?

Nur die Harten kommen in den Garten schrieb:
> Ich will einen guten rat, einen Hinweis wo der Weg hinführt und keine
> massregelung immer freundlich die Nachbarin zu grüßen.

Dann schau dir wohlwollend mal den Rest an. Du willst doch hier sicher 
keine Vorurteile über Programmierer befeuern? ;)

von Vlad T. (vlad_tepesch)


Lesenswert?

AVRJohnny schrieb:
> Gibt es so etwas für C? Bekannt wäre mir ähnliches von MISRA und
> PC_lint.

MISRA ist ja ein Regelwerk und lint ein tool, oder?

Bei MISRA ist ja viel sinnvolles dabei, aber auch einige Regeln, die den 
Code unnötigerweise verkomplizieren/unleserlicher machen und so imho 
mehr Fehler produzieren oder meiner Meinung sogar potentiell gefählich 
sind.

zB die überall angemeckerten impliziten Typkonvertierungen, die 
eigentlich ok sind, aber durch einen Cast dann probleme verursachen, 
wenn der gecastete Datentyp in einen geändert wird, der nicht mehr ok 
ist, der Compiler aber durch den Expliziten Cast nicht mehr meckert.

von mec (Gast)


Lesenswert?

Nur die Harten kommen in den Garten schrieb:
>  P.9: Don't waste time or space
> Reason
>
> This is C++.
> Note
>
> Time and space that you spend well to achieve a goal (e.g., speed of
> development, resource safety, or simplification of testing) is not
> wasted.
>
> Jajajaja, jetzt weiss ich genausoviel wie vorher und bekomme Gratis ein
> Schluck schlechtes Gewissen dazu wenn ich bspw. identifier zwei zeichen
> mehr spendiere.
> Ich will einen guten rat, einen Hinweis wo der Weg hinführt und keine
> massregelung immer freundlich die Nachbarin zu grüßen.

This is C++. sagt doch alles aus ;)
C++ verfolgt andere Ziele als z.B. Java,C# oder Python.
C++ möchte alle Möglichkeiten (Programmierparadigmen) offenhalten, um 
Probleme Rechenzeiteffizient und Speichersparsam lösen zu können. Aber 
C++ hat nicht die Absicht eine Einsteigersprache zu sein ;)
Und dann gibt es noch die enge Verzahnung mit C, was ein rießen Vorteil 
oder auch mal Nachteil sein kann ;)

von -.-.- (Gast)


Lesenswert?

Habs grad mal überflogen. Ich denke da stehen einige Wahrheiten drin, 
allerdings bin ich mit manchen Dingen überhaupt nicht einverstanden:

z.B.

>CPL.1: Prefer C++ to C
>Reason
>
>C++ provides better type checking and more notational support. It >provides 
better support for high-level programming and often generates >faster code.
>
>Example
>
>
1
char ch = 7;
2
void* pv = &ch;
3
int* pi = pv;   // not C++
4
*pi = 999;      // overwrite sizeof(int) bytes near &ch
>Enforcement
>
>Use a C++ compiler.

Ich wusste gar nicht das C++ Code generiert? Meines Wissens macht das 
der Compiler, und da kommts vor allem darauf an welchen ich benutze...
Es gibt g++, genauso gibts aber auch Plattformen für die ich einfach 
keinen C++ Compiler krieg.
Also das ist einfach schmarn

von Fpgakuechle K. (Gast)


Lesenswert?

AVRJohnny schrieb:
> Schönes Projekt. Für den "normalen" C++ Programmierer oversized, aber
> das ist natürlich auch nicht der Anspruch hier.
>
> Gibt es so etwas für C?

Beim schnellen Überfliegen findet man die üblichen Ratschläge für C( 
bspw. zu Globale Variablen) auch in diesem C++.

Was fehlt ist sind aber die ganzen Ratschläge zur Praxis die man zum 
Überleben braucht. Da empfiehlt sich:

http://www.oreilly.de/catalog/wenschleprogger/

weit mehr. Das ist dann auch völlig Sprach- und 
Entwicklungsumgebungsunabhängig.

MfG

von Oliver S. (oliverso)


Lesenswert?

-.-.- schrieb:
> genauso gibts aber auch Plattformen für die ich einfach
> keinen C++ Compiler krieg.
> Also das ist einfach schmarn

Na ja, das Werk ist nicht speziell für den Embedded-Bereich erstellt. 
Das richtet sich mehr an den großen Rest der Programmier-Menschheit, die 
ganz selbstverständlich einen C++-Compiler zur Verfügung hat.

Oliver

von Nur die Harten kommen in den Garten (Gast)


Lesenswert?

Oliver S. schrieb:
> Na ja, das Werk ist nicht speziell für den Embedded-Bereich erstellt.
> Das richtet sich mehr an den großen Rest der Programmier-Menschheit, die
> ganz selbstverständlich einen C++-Compiler zur Verfügung hat.

Genau, das Ganze ist ein Werk von (akademischen) C++ Programmieren für 
(akademische) C++ Programmieren.

Die frage wo C++ sinnvoll und alternativlos eingesetzt werden kann wird 
nicht betrachtet. Auch nicht das zum  programmieren mehr gehört als die 
Kenntniss von tool Guidelines. Auch wenn man sich mit Kapiteln wie 
"philosophy" versucht einen universallen Anstrich zu geben.

von Di P. (drpepper) Benutzerseite


Lesenswert?

Nur die Harten kommen in den Garten schrieb:
> Genau, das Ganze ist ein Werk von (akademischen) C++ Programmieren für
> (akademische) C++ Programmieren.

ergänze: ein Werk u.A. des Entwicklers von C++

von -.-.- (Gast)


Lesenswert?

Di P. schrieb:
> Nur die Harten kommen in den Garten schrieb:
>> Genau, das Ganze ist ein Werk von (akademischen) C++ Programmieren für
>> (akademische) C++ Programmieren.
>
> ergänze: ein Werk u.A. des Entwicklers von C++

Ich mag C++. Nur habe ich manchmal das Gefühl das es als das 
Wunderheilmittel gegen alle Probleme gesehen wird. Die Gefahr, mit C++ 
scheiß Code zu produzieren ist mindestens so hoch wie mit C, das wollen 
aber viele Leute nicht einsehen.

von Nur die Harten kommen in den Garten (Gast)


Lesenswert?

-.-.- schrieb:
> Ich mag C++. Nur habe ich manchmal das Gefühl das es als das
> Wunderheilmittel gegen alle Probleme gesehen wird. Die Gefahr, mit C++
> scheiß Code zu produzieren ist mindestens so hoch wie mit C, das wollen
> aber viele Leute nicht einsehen.

Ja, meist von denen die ausser C++ nix zur Problemstellung/analyse 
beitragen können und durch ihren Tunnenlblick auf C++ und OOP buzzwords 
die Schwierigkeiten noch erhöhen. Wie sagte Paul Watzlawick:

"Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen 
Nagel"

von Di P. (drpepper) Benutzerseite


Lesenswert?

Nur die Harten kommen in den Garten schrieb:
> "Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen
> Nagel"

Mit einem Hammer kannst du dir auch übel aufs Knie oder den Finger 
hauen.

Die o.g. Guidelines versprechen nicht, dass C++ einfach wäre.

: Bearbeitet durch User
von Walter T. (nicolas)


Lesenswert?

Nur die Harten kommen in den Garten schrieb:
> Wie sagte Paul Watzlawick:
>
> "Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen
> Nagel"

Eigentlich schrieb er nur: "Sie können sich Ihren verdammten Hammer an 
den Hut stecken!"

von Nur die Harten kommen in den Garten (Gast)


Lesenswert?

Di P. schrieb:

> Die o.g. Guidelines versprechen nicht, dass C++ einfach wäre.

Ja ein Problem mit einem dafür ungeeigneten Werkzeug sauber zu lösen ist 
nicht einfach - das ist unbestritten.

von Oliver S. (oliverso)


Lesenswert?

Di P. schrieb:
> Nur die Harten kommen in den Garten schrieb:
>> "Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen
>> Nagel"
>
> Mit einem Hammer kannst du dir auch übel aufs Knie oder den Finger
> hauen.

Genau darum geht's doch dabei. Wenn das Problem wirklich ein Nagel ist, 
und das passende Werkzeug ein Hammer, dann hilft das Papier dabei, die 
Aufgabe verletzungsfrei hinzubekommen. Nicht mehr und nicht weniger.

Wer tatsächlich dazu noch ein Vorwort braucht, in dem explizit darauf 
hingewiesen wird, daß ein Hammer nicht das richtige Werkzeug für 
Schrauben ist (was ausgebildete Zimmerleute trotzdem nicht daran 
hindert, Schrauben per Hammer einzuschlagen), sollte lieber gleich die 
Finger von allen Holzarbeiten lassen.

In diesem Sinne

Oliver

von Di P. (drpepper) Benutzerseite


Lesenswert?

Danke, Oliver S.  Schön ausgedrückt! :)

von Sebastian V. (sebi_s)


Lesenswert?

-.-.- schrieb:
> Ich wusste gar nicht das C++ Code generiert? Meines Wissens macht das
> der Compiler, und da kommts vor allem darauf an welchen ich benutze...
> Es gibt g++, genauso gibts aber auch Plattformen für die ich einfach
> keinen C++ Compiler krieg.
> Also das ist einfach schmarn

Wenn es keinen C++ Compiler für die Zielplatform gibt kann man es 
natürlich nicht benutzen. Wenn es allerdings einen gibt finde ich es 
auch nicht verkehrt diesen zu benutzen, auch wenn man eigentlich nur 
etwas C ähnliches programmiert. Das gezeigte Beispiel finde ich z.B. 
gut. Die implizite Konvertierung von void* zu beliebigen anderen 
Pointern ist einfach nervig und Fehleranfällig wie ich finde (gut bei 
malloc spart es Tipparbeit, aber mit einem C++ Compiler kann man ja dann 
new schreiben). Noch ein super nerviges Beispiel aus C ist die implizite 
Deklaration von Funktionen beim Funktionsaufruf.

Vor einige Zeit habe ich hier im Forum mal einen Beitrag gelesen (ich 
glaube es war von einem der Moderatoren, kann mich aber nicht mehr an 
den Namen erinnern), da wurde behauptet das C++ das bessere C ist. Dem 
kann ich nur zustimmen.

von Di P. (drpepper) Benutzerseite


Lesenswert?

Sebastian V. schrieb:
> Vor einige Zeit habe ich hier im Forum mal einen Beitrag gelesen (ich
> glaube es war von einem der Moderatoren, kann mich aber nicht mehr an
> den Namen erinnern), da wurde behauptet das C++ das bessere C ist. Dem
> kann ich nur zustimmen.

Bin prinzipiell deiner Meinung.

Bitte aber keine C++ vs. C Diskussion starten. Dafür gibts andere 
Threads.

von Sheeva P. (sheevaplug)


Lesenswert?

Nur die Harten kommen in den Garten schrieb:
> Das sind keine ratschläge die einem zeigen wie man sein problem löst

Dafür sind diese Ausführungen doch offensichtlich gar nicht gedacht, und 
dazu gibt es ja auch schon genug Literatur, etwa die C++-Annotations von 
Frank B. Brokken, oder auch massenhaft Lektüre über Codingstyles, Design 
Patterns sowie natürlich auch Antipatterns.

> sondern benimm-regel damit einem die Gouvernante nicht auf die Finger
> haut! Bsp:
>
> --
>  P.9: Don't waste time or space
> Reason
>
> This is C++.
> Note
>
> Time and space that you spend well to achieve a goal (e.g., speed of
> development, resource safety, or simplification of testing) is not
> wasted.
>
> --
>
> Jajajaja, jetzt weiss ich genausoviel wie vorher und bekomme Gratis ein
> Schluck schlechtes Gewissen dazu wenn ich bspw. identifier zwei zeichen
> mehr spendiere.

Die Information steckt in dem, was Du nicht zitiert hast. Und wenn Du 
den Teil mal genauer liest, wirst Du schnell feststellen: dabei geht es 
nicht darum, daß ein Identifier zwei Zeichen zuviel hätte. :-)

von Sheeva P. (sheevaplug)


Lesenswert?

.-.  ..-  .  -...  .  -.  -.  .-  ...  . schrieb:
> Ich wusste gar nicht das C++ Code generiert? Meines Wissens macht das
> der Compiler, und da kommts vor allem darauf an welchen ich benutze...

So ein Compiler folgt ja meistens gewissen Regeln, idealerweise denen, 
die von Standards für die betreffende Programmiersprache definiert sind. 
Darum ist ein C++-Compiler besser als ein C-Compiler, weil der 
C++-Compiler eine bessere Typsicherheit durchsetzt und Dir damit hilft, 
Programmierfehler zu vermeiden. Deswegen raten die C++ Core Guidelines 
auch: wenn man gezwungen ist, C-Code zu schreiben, sollte man sich auf 
das gemeinsame Subset von C und C++ beschränken und einen C++-Compiler 
benutzen.

> Es gibt g++, genauso gibts aber auch Plattformen für die ich einfach
> keinen C++ Compiler krieg.

Für den Fall, daß Du keinen C++-Compiler für Deine Plattform bekommst, 
sind die C++ Core Guidelines sicherlich nur von begrenzter Relevanz, 
aber das ist zweifellos kein Problem von (sic!) "C++ Core Guidelines". 
;-)

von Nase (Gast)


Lesenswert?

-.-.- schrieb:
> Ich mag C++. Nur habe ich manchmal das Gefühl das es als das
> Wunderheilmittel gegen alle Probleme gesehen wird.

Ach Quatsch, das verwechselst du. Was du meinst, ist Java :-)

von Rolf M. (rmagnus)


Lesenswert?

-.-.- schrieb:
>>Example
>>
>>char ch = 7;
> void* pv = &ch;
> int* pi = pv;   // not C++
> *pi = 999;      // overwrite sizeof(int) bytes near &ch
>>Enforcement
>>
>>Use a C++ compiler.
>
> Ich wusste gar nicht das C++ Code generiert? Meines Wissens macht das
> der Compiler,

Steht doch auch so da

>>Use a C++ compiler.

> und da kommts vor allem darauf an welchen ich benutze...

Nein, bei dem Beispiel kommt es gerade in C++ eben darauf nicht an - im 
Gegensatz zu C. Die Sprachen C und C++ sind definiert und von der ISO 
genormt. Es gibt aber auch einige Freiheiten für den Compiler.
Ein C-Compiler darf - sofern auf der Plattform char und int nicht gleich 
groß sind - mit obigem Code machen, was er will (undefined behaviour). 
Ein C++-Compiler dagegen muss mit Fehlermeldung abbrechen.

> Es gibt g++, genauso gibts aber auch Plattformen für die ich einfach
> keinen C++ Compiler krieg.

Warum liest du dir denn überhaupt ein Dokument über bessere Verwendung 
von C++ durch, wenn du die Zielplattform gar nicht in dieser Sprache 
programmieren kannst?

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.