Welche C++ Libraries sind standardmäßig immer dabei ohne diese zu includen. Hintergrung der Frage ist, ich kann ohne irgendwelche Header Dateien zu importieren einfache Sachen programmieren wie z.B.: int a, b, c; c = a + b; Aber woher weiß ich was standardmäßig schon in Visual Studio von Microsoft drin ist(ich meine ohne #include<..>)? Sind bei jeder IDE standardmäßig schon Libraries drin bzw. gibt es bestimmte Standard Libraries die immer schon dabei sind ohne diese extra durch #include<..> zu importieren?
:
Verschoben durch User
Guest123 schrieb: > Welche C++ Libraries sind standardmäßig immer dabei ohne diese zu > includen. Keine. Guest123 schrieb: > int a, b, c; > c = a + b; Das geht immer, da hier nichts aus irgendwelchen Bibliotheken genutzt wird. Integer-Typen und Arithmetik darauf ist Bestandteil der Sprache selbst, und kommt aus keiner Bibliothek. Guest123 schrieb: > Aber woher weiß ich was standardmäßig schon in Visual Studio von > Microsoft drin ist(ich meine ohne #include<..>)? Alles was keine Funktionen, Klassen oder Typen außer den Standard-Integer-Typen benutzt. Es gibt einige vordefinierte Makros die ebenfalls immer dabei sind: https://msdn.microsoft.com/en-us/library/b0084kay.aspx Guest123 schrieb: > Sind bei jeder IDE standardmäßig schon Libraries drin Nein. Guest123 schrieb: > bzw. gibt es > bestimmte Standard Libraries die immer schon dabei sind ohne diese extra > durch #include<..> zu importieren? Nein. Die Compiler bieten allerdings einige Erweiterungen zur Sprache; diese sind dann Teil der Sprache und nicht der Bibliothek, und auch ohne #include nutzbar, z.B. "declspec" in Visual C++. Solche Dinge sollte man aber sowieso soweit wie möglich vermeiden und nur Dinge nutzen, die der C++ Standard garantiert. Die Header der Standard-Bibliothek, also z.B. <iostream>, <algorithm>, <type_traits> ... sollten aber bei jedem C++-Compiler dabei sein. Es macht wenig Sinn, diese irgendwie zu vermeiden. Das Programm wird nicht größer, langsamer oder hässlicher wenn man diese Header einbindet.
Guest123 schrieb: > Welche C++ Libraries sind standardmäßig immer dabei ohne diese zu > includen. Man "includet" keine Libraries, sondern Header-Dateien. > Hintergrung der Frage ist, ich kann ohne irgendwelche Header > Dateien zu importieren einfache Sachen programmieren wie z.B.: > int a, b, c; > c = a + b; Das gehört zum Sprachkern, nicht zu irgendwelchen Libraries. > Aber woher weiß ich was standardmäßig schon in Visual Studio von > Microsoft drin ist(ich meine ohne #include<..>)? Indem du die Sprache lernst ;-) > Sind bei jeder IDE standardmäßig schon Libraries drin bzw. gibt es > bestimmte Standard Libraries die immer schon dabei sind ohne > diese extra> durch #include<..> zu importieren? Wenn, dann nicht bei der IDE, sondern beim Compiler/Linker. Aber in der Regel nicht.
Rolf M. schrieb: > Man "includet" keine Libraries, sondern Header-Dateien. Das haben wir den Arduino-Leuten zu verdanken, die den Begriff missbrauchen. So sehr mir das gegen den Strich geht, wir werden uns wohl damit abfinden müssen, in Zukunft zwischen zwei Arten von Libraries zu differenzieren - Binärlibraries ("echte Libraries", *.a oder *.lib) und Sourcelibraries (aber nur bei C++, wie das ganze Arduino-Geraffel, aber auch solche Dinge wie die STL).
Oder man definiert den Begriff "Library" einfach abstrakter als "wiederverwendbare Programmkomponente" o.ä. ohne konkrete Angabe, wie dies technisch umgesetzt wird. Dies ist dann ein Überbegriff für die einzelnen Varianten, für die man dann spezifische Begriffe verwendet: - "Header-Only Library" für (template-)Bibliotheken, bei denen alles inline ist und die eben nur in Form von Header-Dateien ausgeliefert werden, wie std::vector oder z.B. https://github.com/Erlkoenig90/uSer - "Static Library" - .a / .lib mit kompiliertem aber nicht gelinktem Code - "Shared Object/Dynamic Library" - .so / .dll mit kompiliertem und gelinkten Code.
:
Bearbeitet durch User
Wenn man tatsächlich weiß, wovon man redet, ist das ja alles vollkommen in Ordnung. Wenn man aber nur die "Arduino"-Sichtweise kennt, und dann mit dem anderen, älteren Modell der Binärlibrary konfrontiert wird (die dritte Variante ist auf µCs eher nicht zu finden), dann gibt es fast jedesmal größere Verständnisprobleme. Klar ist jedenfalls, daß man in C nur Binärlibraries verwenden kann, in C++ hingegen sowohl Binär- als auch Sourcelibraries.
Rufus Τ. F. schrieb: > Klar ist jedenfalls, daß man in C nur Binärlibraries verwenden kann Wie das? Ich kann in C doch auch einen Header schreiben, der nur Typ-Definitionen, Makros und inline-Funktionen enthält...
Niklas G. schrieb: > Ich kann in C doch auch einen Header schreiben, der nur > Typ-Definitionen, Makros und inline-Funktionen enthält... Natürlich kannst Du das. Das aber ist keine Library.
Rufus Τ. F. schrieb: > Niklas G. schrieb: >> Ich kann in C doch auch einen Header schreiben, der nur >> Typ-Definitionen, Makros und inline-Funktionen enthält... > > Natürlich kannst Du das. Das aber ist keine Library. Was macht den C++-Header denn zur Source-Library, das in C nicht möglich ist?
Rolf M. schrieb: > Was macht den C++-Header denn zur Source-Library, das in C nicht möglich > ist? Templates. merciless
Dirk K. schrieb: > Rolf M. schrieb: >> Was macht den C++-Header denn zur Source-Library, das in C nicht möglich >> ist? > > Templates. Und wenn da Funktionen stehen, die keine Templates sind, ist es keine Lib mehr?
Rolf M. schrieb: > Und wenn da Funktionen stehen, die keine Templates sind, ist es keine > Lib mehr? Man kann natürlich den einfachen Weg gehen und einfach alles "Lib" nennen, was einem unter die Finger kommt, das vereinfacht vor allem technische Diskussionen ungemein.
Rufus Τ. F. schrieb: > Rolf M. schrieb: >> Und wenn da Funktionen stehen, die keine Templates sind, ist es keine >> Lib mehr? > > Man kann natürlich den einfachen Weg gehen und einfach alles "Lib" > nennen, was einem unter die Finger kommt, das vereinfacht vor allem > technische Diskussionen ungemein. Ein anderer einfacher Weg ist, sich irgendwelche willkürlichen Voraussetzungen wie "enthält Templates" zur Definition einer "Lib" herzunehmen.
Nun, der im C- und auch C++-Bereich bislang klar und eindeutig definierte Begriff "Library" wurde durch Gebilde wie die STL im C++-Bereich verwässert und durch die massiv falsche Anwendung des Begriffes im Arduino-Bereich noch weiter verdünnt, um nicht zu sagen potenziert.
Rufus Τ. F. schrieb: > massiv falsche Anwendung des > Begriffes im Arduino-Bereich noch weiter verdünnt, um nicht zu sagen > potenziert. Kannst du das näher erläutern? "Eine Bibliothek bezeichnet in der Programmierung eine Sammlung von Unterprogrammen/-Routinen, die Lösungswege für thematisch zusammengehörende Problemstellungen anbieten. Bibliotheken sind im Unterschied zu Programmen keine eigenständig lauffähigen Einheiten, sondern sie enthalten Hilfsmodule, die von Programmen angefordert werden." => Passt doch wunderbar?
Ja, wenn man die allgemeinstmöglich gehaltene Formulierung verwendet, dann passt das. Dann aber ist jedes beliebige Stück Sourcecode, das sich nicht im gleichen Sourcefile wie main oder setup und loop befindet, eine "Bibliothek", und damit ist irgendwie wenig gewonnen.
Rolf M. schrieb: > Dirk K. schrieb: >> Rolf M. schrieb: >>> Was macht den C++-Header denn zur Source-Library, das in C nicht möglich >>> ist? >> >> Templates. > > Und wenn da Funktionen stehen, die keine Templates sind, ist es keine > Lib mehr? Hab ich nicht behauptet. C++-Templates stehen technisch bedingt in Header-Files und sind für einen C-Compiler unbekannt. Ich vertrete ja auch die Meinung, dass man alles mögliche als Bibliothek bezeichnen kann, was irgendwie Code zur Wiederverwendung enthält. Außerdem verstehe ich diese Diskussion hier nicht mehr, das ist mir etwas zu akademisch geworden (um nicht zu sagen: esoterisch). Der Wikipedia-Artikel beschreibt recht gut meine Vorstellung einer Bibliothek. merciless
Dirk K. schrieb: > Außerdem verstehe > ich diese Diskussion hier nicht mehr, das ist mir etwas > zu akademisch geworden (um nicht zu sagen: esoterisch). Aha. *.a-, *.lib- oder auch *.so bzw. *.dll sind "akademisch" und "esoterisch", oder die Unterscheidung zwischen diesen Dingen und Quelltext. Warum nennen wir eigentlich unterschiedliche Programmiersprachen unterschiedlich? Es reicht doch, wenn wir sie einfach "Programmiersprache" nennen, der Rest erschließt sich dann ja aus dem Kontext.
Rufus Τ. F. schrieb: > Aha. *.a-, *.lib- oder auch *.so bzw. *.dll sind "akademisch" und > "esoterisch", Hö? Es gibt keine klare Definition, ob ein Bithaufen eine Bibliothek darstellt oder nicht. Der Wikipedia-Artikel beschreibt das meiner Meinung nach ganz vernünftig. Esoterisch ist für mich der Versuch, diese Definition zu treffen. Bibliothek also nur, wenn Binaries dabeiliegen? Was ist dann die STL? Die hat ja dann schon den falschen Namen (Standard Template Library). BOOST: Gemisch aus Templates/Binaries, aber auch Bibliothek? Sammlung von Macros in C-Headerfiles, Bibliothek? merciless
Dirk K. schrieb: > Was ist dann die STL? Die hat ja dann schon > den falschen Namen (Standard Template Library). Meinst du wirklich die originale STL, welche bei SGI entwickelt wurde und praktisch nicht mehr verwendet wird? Sicher dass die Header-Only ist/war? Siehe https://stackoverflow.com/a/5205571 Die standardisierte, von (fast) allen Compilern unterstützte C++ Standard Library, ist zum Beispiel beim GCC ein Shared Object, also eine "echte" Bibliothek, sie enthält eine "libstdc++.so", und natürlich Header mit vielen templates. Nebenbei sind auch Funktionen & Klassen enthalten, die überhaupt keine templates sind, und ganz gewöhnliche Nicht-inline-Definitionen haben, eben in dieser .so Datei.
Rufus Τ. F. schrieb: > Warum nennen wir eigentlich unterschiedliche Programmiersprachen > unterschiedlich? Es reicht doch, wenn wir sie einfach > "Programmiersprache" nennen Ähhh, genau das tun wir doch. "Programmiersprache" ist ein Sammelbegriff für alle möglichen Sprachen (C++, Java, usw.). Manche Leute...
Gugelhupf schrieb: > Ähhh, genau das tun wir doch Nein. Hier im Forum erwähnen wir, in welcher Programmiersprache wir irgendwas geschrieben haben, und manche hauen sich deswegen auch die Köpfe ein. Einfach nur "Hier ist Code für µC XY, geschrieben in einer Programmiersprache" gibt es hier nicht, sondern es wird explizit darauf hingewiesen, ob das C, C++, Assembler, Pascal oder was auch immer ist.
Gugelhupf schrieb: > "Eine Bibliothek bezeichnet in der Programmierung eine Sammlung von > Unterprogrammen/-Routinen, die Lösungswege für thematisch > zusammengehörende Problemstellungen anbieten." Und um was handelt es sich, wenn sich in dieser Sammlung auch Lösungswege für thematisch nicht zusammengehörende Problemstellungen befinden? > Bibliotheken sind im > Unterschied zu Programmen keine eigenständig lauffähigen Einheiten, > sondern sie enthalten Hilfsmodule, die von Programmen angefordert > werden." Programmcode, der von einem Betriebssystem nachgeladen und dann ausgeführt wird, wäre somit auch kein Programm, da er meist auf Betriebsmittel des Betriebssystems zurückgreift und auch erhebliche Initialisierungsaufgaben vom Betriebssystem übernommen werden. Auch der Einstieg mittels Sprung in eine main()-Funktion o.ä. entspricht eher dem Aufruf einer Bibliotheksfunktion. Folglich wäre höchstens Programmcode, der direkt ohne Bootloader ab dem Reset ausgeführt wird, als Programm anzusehen? Und wie sieht es aus, wenn solch ein Programmcode selbst auf Bibliotheken zurückgreift, die separat im Speicher liegen? Wenn wir auch unter einem Betriebssystem nachgeladenen und gestarteten Programmcode als Programme bezeichnen, gibt es wiederum die entgegengesetzten Fälle, nämlich dass als DLL vorliegender Code weitestgehend eigenständig ablaufen kann und sämtliche Funktionalität mitbringt. Vielfach wird so etwas z.B. als "Server" bezeichnet. > => Passt doch wunderbar? Naja.
Niklas G. schrieb: > Dirk K. schrieb: >> Was ist dann die STL? Die hat ja dann schon >> den falschen Namen (Standard Template Library). > > Meinst du wirklich die originale STL, welche bei SGI entwickelt wurde > und praktisch nicht mehr verwendet wird? Sicher dass die Header-Only > ist/war? > Siehe https://stackoverflow.com/a/5205571 Nein, ich meine das, was landläufig darunter verstanden wird: Eine Sammlung von C++-Headerfiles, die Templates enthalten. > Die standardisierte, von (fast) allen Compilern unterstützte C++ > Standard Library, ist zum Beispiel beim GCC ein Shared Object, also eine > "echte" Bibliothek, sie enthält eine "libstdc++.so", und natürlich > Header mit vielen templates. Nebenbei sind auch Funktionen & Klassen > enthalten, die überhaupt keine templates sind, und ganz gewöhnliche > Nicht-inline-Definitionen haben, eben in dieser .so Datei. STL != C++ Standard Library https://de.wikipedia.org/wiki/Standard_Template_Library merciless
Dirk K. schrieb: > Eine Sammlung von C++-Headerfiles, > die Templates enthalten. Also <vector>, <string> etc., aber nicht <cstdio> oder <clocale>? Per Standard gehört das alles zur Standard Library. Bei üblichen Implementationen gehören die auch untrennbar zusammen. Außerdem heißt es im von dir zitierten Artikel sogar: "Aus diesem Grund ist es nicht möglich, eine Teilmenge der C++-Standardbibliothek als STL zu benennen." Landläufige Begriffe sind leider etwas schwammig... Dirk K. schrieb: > STL != C++ Standard Library Das habe ich auch gesagt
:
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.