Anfänger Frage: Welchen Standard wählen

L

logoft

Foren As
Hallo,

früher wußte ich nie wie ich anfangen muß. Heute weiß ich einfach anfangen und mir alles selbst beibringen.

Was ich mich aber noch frage, es gibt mehrere Standards. Ich weiß nicht wie ich es ausdücken soll. Da steht (stimmt nicht) C55 oder CAnsi. Keine ahnung wie man das nennt. Gibts da Unterschiede sind die Kompatibel? Angenommen ich würde eines Tages in einer Gruppe etwas programmieren, könnten sich die Leute dann den Code gegenseitig austauschen?
Ich hoffe es versteht einer was ich meine :-)

mfg
 
Ich bin nicht sicher, was du mit Standards meinst...
Von den gängigen Programmiersprachen gibt es Standards, das sind im Wesentlichen Regelwerke, die nur festlegen, welche Formulierungen erlaubt sind und welche nicht, oder wie die Standardbibliothek aussieht. z.B. ist folgende Form in C89 verboten:
Code:
for (int i = 0; i < 10; ++i)  {}
In den nachfolgenden Standards (C99) ist sie dann erlaubt! In C89 müsste das jedoch so aussehen:
Code:
int i;
for (i = 0; i < 10; ++i)  {}

Das sind allerdings Detail-Fragen, mit denen man nur in seltenen Fällen konfrontiert wird.

Was du wahrscheinlich meinst ist der Einrückungsstil, der festlegt, wie der Code optisch aussehen sollte.
An dieser Stelle kann ich dir den Wikipedia Artikel dazu empfehlen: https://de.wikipedia.org/wiki/Einrückungsstil

Welchen man da verwenden sollte, ist tatsächlich eine Glaubensfrage unter Programmierern! Bei manchen Projekten ist vorgegeben, welchen Stil alle verwenden sollen, bei anderen ist man da etwas freier, aber irgendeinen solltest du dir auf jeden Fall zulegen!

Ich persönlich bin ein Verfechter des 1TBS (also ganz hochmütig: "One True Brace Style"). ;-)

Viele Grüße,
Pik-9
 
Hallo Pik-9,

ich meinte das 1. :-)
Ich würde den Standard als Dialekt verstehen, nachdem ich Deine Erklärung gelesen habe.
Ich hätte da gleich noch weitere Fragen :-). Ist ein Standard mit einer höheren Nummer Automatisch besser zu lernen? Oder gibt es ein Standard der für einen Anfänger empfehlenswert wäre? Welcher vermittelt das denken wie ein Programmierer zu lernen besser?

Und zu den Einrücken. Was sollte man beachten, auf was kommt es an und was sollte man teilweise und absolut vermeiden? Was macht die Lesbarkeit des Codes aus? Was ist ein gut gerückter Code?

Danke
 
Hallo logoft,

ich würde die Standards eher als eine Art Rechtschreibreform sehen und die Einrückungsstile als Dialekt. Ich finde diesen Vergleich treffender! ;-)
Die Zahl hinter den Standards steht meistens für das Jahr, in dem sie verabschiedet wurden: C99 im Jahre 1999, C++11 im Jahre 2011, usw.
Eine höhere Zahl bedeutet also moderner, nicht unbedingt besser!
Wenn das Standardisierungskommitee (das ist ein Gremium aus renommierten Informatikern und Wissenschaftlern) einen neuen Standard verabschiedet, sind die Compiler Hersteller prinzipiell aufgefordert, diesen zu implementieren. Die Praxis zeigt aber, dass das manchmal Jahre dauert! C++11 wird zum Beispiel bis heute von vielen Compilern noch nicht voll unterstützt! Der GCC soll dies afaik ab Version 6 als Standard verwenden.
Fortran 2008 wird von keinem einzigen freien Compiler unterstützt.
Bei der Wahl des Standards musst du also immer in Betracht ziehen, welchen Compiler du verwenden willst und ob dieser den gewählten Standard überhaupt schon vollständig unterstützt.
Der GCC (C-Compiler) kompiliert standardmäßig nach C89, wenn du einen anderen Standard willst, musst du das explizit angeben:
Code:
gcc -std=c99 <source files>

Der g++ verwendet so weit ich weiß noch C++98 - Wenn du ein Projekt in C++11 oder C++14 hast, musst du das wieder explizit angeben:
Code:
g++ -std=c++11 <source files>
Näheres zu dem aktuellen Stand beim g++ findest du hier: https://gcc.gnu.org/projects/cxx-status.html#cxx11.

Zu den Einrückungsstilen
Auf der Wikipedia Seite waren einige Beispiele der gängigen Stile gegeben. Wichtig ist eigentlich nur, dass du dich für EINEN entscheidest und diesen in deinem Projekt stringent durchziehst! Viele Programmierer entwickeln auch ihre eigenen Stile im Laufe der Zeit - auch das ist in Ordnung, solange man innerhalb eines Projektes dabei bleibt. In vielen Lehrbüchern wird wegen der Übersichtlichkeit z.B. der Allmann Stil verwendet:
Code:
while (active)
{
  if (x == 3)
  {
    cout << "3!" << endl;
  }
  else
  {
    foo (bar);
  }
}

Andere finden diesen Stil verschwenderisch und verwenden K&R:
Code:
while (active) {
  if (x == 3)
    cout << "3!" << endl;
  else
    foo (bar);
}

Es gibt noch viele andere Stile; welcher davon am besten lesbar ist, ist Geschmacks- und Gewohnheitssache. Guck dir am besten die Beispiele auf der Wikipedia Seite an und entscheide selbst!

Viele Grüße,
Pik-9
 
Hallo Pik-9,

danke für Deine Antworten. Ich hätte da noch eine. Wenn man den Standard festlegen kann. Könnte ich dann auch prüfen welcher Standard der Compiler aktuell hat? So eine Art Info-Aufruf?
 
Hallo logoft,

die meisten Compiler haben ein Macro, in dem der Standard steht. Beim g++ ist das __cplusplus, beim gcc (nur C) __STDC_VERSION__. Siehe: https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html#Standard-Predefined-Macros

Du bist also auf den Preprozessor angewisen:
Code:
#include <iostream>

using namespace std;

int main (int argc, char *argv[])
{
  cout << "Using standard: " << __cplusplus << endl;

#if __cplusplus == 201103L
  cout << "GCC is configured to use C++11. Yeah!" << endl;
#elif __cplusplus == 201402L
  cout << "GCC is configured to use C++14. Cool!" << endl;
#endif

  return 0;
}

Speichere das mal unter main.cpp ab und kompilier es mit den verschiedenen Standards und lass dich überraschen, was das fertige Programm ausgibt:
Code:
g++ -o cpp98 main.cpp
g++ -std=c++11 -o cpp11 main.cpp
g++ -std=c++14 -o cpp14 main.cpp

Wenn du das allerdings mit irgendeinem anderen Compiler, als mit dem gcc kompilierst, wirst du wohl Fehlermeldungen erhalten, da diese Makros afaik nur dort so heißen.

Viele Grüße,
Pik-9
 
Hallo Pik-9,

Die erste Anforderung gibt nichts aus. Bei den 2 anderen gibts eine Fehlermeldung. Vielleicht mache ich dabei was falsch, Eine Datei habe ich noch nie comiliert. Bisher habe ich nur mit IDEs rumgespielt. Noch nie was auf die Beine gestellt mit C.

Und Dein Link ist mir zu schwierig das ich da was für mich nützliches heraus lesen könnte.
 
Hallo logoft,

die Kommandos selbst geben auch nichts aus! Sie erzeugen ausführbare Dateien namens cpp98, cpp11 und cpp14. Erst wenn du diese ausführst, erhältst du einen Output. Also z.B.
Code:
./cpp98

Der Link, den ich dir gegeben habe, enthält im Wesentlichen eine Auflistung einiger wichtiger Präprozessor Makros des GCC. Der Präprozessor ist im Prinzip ein Programm, das vor dem eigentlichen Kompilieren den Quelltext aufbereitet und anschließend dem Compiler übergibt. g++ und gcc sind eigentlich Wrapper, die die wichtigen Einzelschritte automatisch nacheinander ausführen: Präprozessor, Compiler, Linker.

Da der verwendete Standard nur eine Compiler Konfiguration ist, kannst du das auch nur über Präprozessor Makros in Erfahrung bringen - Ein Beispiel dafür siehst du in meinem obigen Code.

Solltest du dubiose Fehlermeldungen bekommen, poste die doch bitte mal, damit wir herausfinden können, was hier schief läuft.

Viele Grüße,
Pik-9
 
Hallo Pik-9,

irgendwas testen was ich nicht kenne geht mir dann doch zu schnell. Für mich war und ist interessant gewesen wie das kleinste Programm aufgebaut sein müßte. Bei Pascal program begin und end. So könnte ich anfangen zu testen.

Bei C sind es wohl die spitzen Klammern [ ] .

Weil ich Startprobleme mit OpenBSD hatte, habe ich durch Zufall die Seite proggen.net entdeckt. Die schreiben das die Seite für absolute Anfänger ist. Ich habe mich damals in BASIC versucht und in Pascal ganz kurz. Deine Beispiele sind zwar nett gemeint, aber für mich schon viel zu viel.
Ich habe bisher üerall gefragt (Foren) wie ich Befehle finde. Woher ich weiß welche Datei ich includen muß, Ich fragte und bekam als Antwort einfach anfangen. Damals als BASIC-Programme in Zeitschriften standen haben Leute alles abgetippt. Ich sah kein Sinn darin. Heute weiß ich es war ein Fehler.

Danke
 
Hallo logoft,

das kleinste C Programm, das möglich ist, lautet:
Code:
int main(){}
Die int main ist das Herzstück einer jeden C/C++ Anwendung, wenn sie in dem Programm nicht vorkommt, weiß der Compiler nicht, was er jetzt tun soll (Es sei denn, du erstellst eine Bibliothek, aber das ist eine andere Geschichte...). Das Äquivalent zu begin und end in Pascal lautet {}, nicht []! Letztere werden benutzt um Arrays zu definieren.

Ansonsten kann ich deine Position gut nachvollziehen; Vor etwa zehn Jahren wollte ich auch C/C++ lernen und habe mich am Anfang genauso wie der Ochs vorm Berg gefühlt! Ich kam genau wie du von Pascal (Delphi in meinem Fall). Mir persönlich hat es damals sehr geholfen, mir ein Buch über C++ zu besorgen, in dem erst mal die ganzen Grundlagen leicht verständlich erläutert wurden.

Auf deine Frage, woher man die ganzen Befehle und includes kennt, lautet die Antwort: Aus einer Referenz! Die gibt es zum einen Online: http://de.cppreference.com/w/ und zum anderen auch in Buchform, z.B. "C++ - Die professionelle Referenz" (ISBN 3826617738 ). Dieses Buch kann ich dir persönlich wärmstens empfehlen, da es sehr umfangreich ist und wirklich alle Details der C++ Programmiersprache gut strukturiert erklärt werden.

Also mein Rat lautet nicht einfach anfangen, mein Rat lautet: Besorge dir erst ein gutes Buch für den Einstieg in C++, lese dich ein Wenig ein und fange dann an!

Ich hoffe, das hilft dir ein Bisschen und, dass du dich nicht frustriert vom Programmieren abwendest.
Viele Grüße,
Pik-9
 

Ähnliche Themen

2 Anfänger Fragen! grep & cp - Bitte helfen!

Software Freedom Day 2009 in Hamburg

Anfänger Problem/Fragen - Ethernet!?

Mal komplett was neues aufbauen ?

3 Fragen ( für den Anfang =) )

Zurück
Oben