clang erstellt hallo.cpp nicht

R

ralli

Guest
Ich habe ein c++ Tutorial als Buch, das ich mal durcharbeiten möchte. Standardmäßig ist ja seit einiger Zeit clang als Compiler bereits durch die Grundinstallation an Bord. Traditionsgemäß habe ich zu erst ein Hallo Welt Programm erstellt.

Code:
#include <iostream>                             // Ein- und Ausgabebibliothek

using namespace std;

int main(){                                     // Hauptfunktion

    cout << "Hallo, Welt!";                     // Ausgabe

    return 0;                                   // Optionale Rückgabe an das OS

}

Es ist doch richtig, das clang gleichermaßen c und c++ verarbeiten kann, oder irre ich mich.

Compiliert habe ich das wie gewohnt mit:

Code:
clang hallo.cpp -o hallo

Das funktioniert leider nicht und der Compiliervorgang bricht mit einer Fehlermeldung ab:

Code:
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Müssen noch Pakete oder Bibliotheken fürs c++ programmieren nachinstalliert werden?
 
Code:
clang hallo.cpp -o hallo
Das baut C-Code. Für C++ ist es clang++:
Code:
clang++ hallo.cpp -o hallo
 
Oder:

clang -lc++ hallo.cpp -o hallo
Aha interessant. Ja bekanntlicherweise führen ja viele Wege nach Rom .... Das hätte ich eh wissen müssen, bei gcc gibt es ja auch g++. Zumal ich kein Anfänger bin und schon länger mit Qt arbeite. Mich interessiert, wo die Unterschied zwischen dem C++ Standard sind und wo Qt als Klassenbibliothek eigene Wege geht.
 
Aha interessant. Ja bekanntlicherweise führen ja viele Wege nach Rom .... Das hätte ich eh wissen müssen, bei gcc gibt es ja auch g++. Zumal ich kein Anfänger bin und schon länger mit Qt arbeite. Mich interessiert, wo die Unterschied zwischen dem C++ Standard sind und wo Qt als Klassenbibliothek eigene Wege geht.
Qt stammt noch aus einer Zeit, zu der es noch keinen C++-Standard gab (1990, der erste Standard ist von 1998) und somit auch keine STL. Daher implementiert Qt eine Menge Datenstrukturen selbst, teilweise deutlich unterschiedlich vom späteren Standard, vor allem in Bezug auf COW und resource sharing. Diese werden aus Gründen der Abwärtskompatibilität noch beibehalten, aber selbst unter den Entwicklern ist der Nutzen abgesehen von der Kompatibilität umstritten. Ich habe auf der letztjährigen Meeting C++ da interessante Gespräche mit einigen Entwicklern geführt. Mit Qt 6.0 könnte es da einen Bruch geben, aber die STL-Klassen kann man jetzt schon problemlos im eigenen Code verwenden und auch der Qt Creator nutzt intern hauptsächlich ``std::vector`` anstatt ``QVector``. Ich handhabe das persönlich ebenso und halte dieses Vorgehen auch für empfehlenswert, da die STL-Klassen kompatibel mit modernem C++ sind, was bei älteren Qt Versionen nicht gegeben ist.
 
Obwohl ich Qt mag, wird es mir immer unübersichtlicher. Aber es ist schon vorbildlich dokumentiert. Und der Creator ist zur eierlegenden Wollmilchsau mutiert, der alles können soll. Meine ersten Erfahrungen mit C++ (pur) sind leider nicht unbedingt positiv. Ich habe mir im Netz einige Tutos angeschaut und deren Beispiele. Vieles funktionierte einfach nicht. Aber das muß eher am irgendwie nicht standardisierten Quellcode liegen. Das ist, wenn man es lernen möchte sehr ärgerlich. Ich habe mir vor Jahren mal ein Buch von Herbert Schildt "C++ Tutorial" angeschafft, was ich durcharbeiten wollte. Leider ist die dazugehörende CD mit dem Beispielcode wohl mal abhanden gekommen. Man lernt zwar auch beim Tippen, aber das ist sehr mühselig und erinnert mich an Zeiten der Homecomputer, wo wir stundenlange Listings aus der Computer Persönlich abgetippt haben. Aber das ist ja sehr lange her, so um 1983.
 
Ein großes Problem bei Lehrmaterial zu C++ ist immer, dass die Sprache sich in den letzten Jahren bedeutend schneller als die das Wissen so manches Entwicklers fortentwickelt hat. Viele Bücher und Online-Kurse haben gerade erst halbherzig C++11 erreicht, während C++14 nun schon fast 2 Jahre standardisiert ist und C++17 in den Startlöchern steht. C++14 war nur ein kleiner Schritt, deshalb war es nicht so schlimm, aber C++17 wird wieder ein größerer Sprung. Wenn auch nicht ganz so groß wie erhofft. Deshalb sollte man idealerweise auch gleich dort einsteigen.
 
Und da du noch lernst und dir also noch keinen Quatsch gemerkt hast: Fang' mit

Code:
using namespace std;

gar nicht erst an!
 
Und da du noch lernst und dir also noch keinen Quatsch gemerkt hast: Fang' mit

Code:
using namespace std;

gar nicht erst an!
Ich möchte ja gerne Deinem Rat folgen, nur bin ich ein wenig irritiert, da der Quellcode ja von Herbert Schildt in vorgenannten Lehrbuch erstellt wurde. Und Herbert Schildt war nach eigener Aussage Mitglied im ANSII Komitee und hat maßgeblich an der Standardisierung von C++ mitgearbeitet. Dann sollte ich das Buch besser nicht weiter benutzen?
 
Es wird zumindest als überaus schlechter Stil angesehen. Du riskierst durch das Verschmutzen deines Namespaces Kollisionen (spätestens, wenn du mal externe Bibliotheken einbindest) und verlierst unter Umständen recht schnell den Überblick über deine Codestruktur.
http://stackoverflow.com/a/1452738

Dazu kommt, dass der Mehrwert, der dem gegenüber steht, ziemlich gering ist. Du sparst halt ein paarmal "std::".
 
Das ist auch eine Frage des Toolings. C++ ist so eine Sprache, bei der ein vernünftiger Editor einem jede Menge Arbeit abnehmen kann. Das geht schon mit Vim und Kollegen, wenn man die richtigen Plugins hat. Wobei ich inzwischen älter und pragmatischer geworden bin und seit dem ersten Tag Jetbrains Clion nutze. Ich hatte es sogar nativ auf FreeBSD portiert, aber das Projekt irgendwann nicht mehr weiterverfolgt, da Jetbrains sich nicht wirklich zur Legalität davon äußern wollte und damit die Aufnahme in die FreeBSD Ports unwahrscheinlich wurde. Wenn da jemand ernsthaftes Interesse dran hat, könnte ich mal meine Mitschrift von damals raussuchen.
 
Clion ist eine interessante Entwicklung. Die Fa. Jetbrains kannte ich bereits, sie macht schon eine gute IDE für Java Swing. Allerdings kostet Clion 199$ im Jahr, danach etwas weniger. Eine kostenlose Version für Privatanwender habe ich jetzt auf die Schnelle nicht gefunden. Da muß ich leider bei Geany und dem Qtcreator für C++ GUI bleiben.;'(
 
Ich fand Jetbrains-Software zwar immer ganz nett, aber stellenweise doch erheblich unperformant. Emacs mit zwei, drei ausgesuchten Plugins macht einem das Leben allerdings tatsächlich recht leicht. (Mir entgeht irgendwie der erhebliche Mehrwert, den so ein aufgeblasenes buntes Ding da angeblich bietet.)

Eine kostenlose Version für Privatanwender habe ich jetzt auf die Schnelle nicht gefunden.

https://www.jetbrains.com/buy/opensource/?product=clion
 
Herbert Schildt [...] Dann sollte ich das Buch besser nicht weiter benutzen?
Zu Herbert Schildt gibt es, sagen wir mal sehr geteilte Meinungen. Zu seinem Werk "The annotated ANSI C Standard" hab ich schon gelesen: "Billigste Möglichkeit den finalen Standard gedruckt zu erhalten, nur sollte man auf keinen Fall die Anmerkungen lesen".

Die englische Wikipedia schreibt
https://en.wikipedia.org/wiki/Herbert_Schildt schrieb:
Other reviewers have been more positive, with one ACCU reviewer saying about Schildt's C: The Complete Reference, Fourth Edition that Schildt "has learnt something, not enough to receive positive acclaim but enough to remove the 'positively detrimental' epithet"


Edit: Hoffentlich klickbarer Link: https://en.wikipedia.org/wiki/Herbert_Schildt
 
Ja das wußte ich, das Herbert Schildt einen schlechten Ruf unter Profiprogrammierern besitzt. Und zwar aus einem Fachforum. Da ging es um eine Fachbuchempfehlung. Allerdings hatte ich mir das Buch bereits angeschafft. Für einen Einsteiger ist das sehr schwer zu bewerten oder einzuschätzen, wenn man sich auf Experten auch schon nicht mehr verlassen kann. Ich habe mich nur gefragt, auf Grund welcher Eigenschaften Herbert Schildt denn in dieses Kommitee berufen wurde? Vielleicht kennt der eine oder andere von Euch ein wirklich gutes Buch oder einen guten Workshop, der auf der Höhe der Zeit ist und auch die Änderungen berücksichtigt und daher aktuell ist. Meinen Lebensunterhalt muß ich damit ja nicht verdienen, daher bleibt es auch tatsächlich ein wenig Hobby. Dabei wäre mir zumindest Semiprofessionalität schon wichtig. Und im Grunde ging es mir auch darum Qt (noch besser) zu verstehen.
 
Die Bücher von Stroustrup (C++) und Jossutis (StdLib) sind m.E so etwas wie ein Standard und gut brauchbar. Zur Vertiefung kann man bei Scott Meyers einiges finden wenn man meint unbedingt ein Buch benutzen zu wollen. Ansonsten selbst programmieren und den Code von anderen lesen. Bei github finded man da eine Menge, allerdings nicht nur gutes...

Das eigentliche Problem von C/C++ ist das Tooling. Ich benutze seit längerem SublimeText und Premake3 (https://github.com/annulen/premake) und bin damit soweit zufrieden. Ich finde nach wie vor dass ein guter Editor besser ist als eine IDE, aber das ist Geschmacksache. Für Qt ist sicherlich qmake (eine cmake variante) eine Option. Cmake ist allerdings genau so eine Krücke wie make.
 
Danke für die Tipps und Informationen, ich werde mich dann wohl an Stroustrup orientieren und halten, schließlich stammt die Obermenge von C ja von ihm selbst.
 
Zurück
Oben