mikrocontroller.net

Forum: PC-Programmierung c++ include Visual Studio


Autor: Guest123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 Moderator
Autor: Niklas G. (erlkoenig) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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).

Autor: Niklas G. (erlkoenig) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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
Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Niklas G. (erlkoenig) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Niklas G. (erlkoenig) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde es, genau wie in C++, als Header-Only-Library bezeichnen...

Autor: Dirk K. (merciless)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Dirk K. (merciless)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Rolf M. schrieb:
> Was macht den C++-Header denn zur Source-Library, das in C nicht möglich
> ist?

Templates.

merciless

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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.

Autor: Gugelhupf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Dirk K. (merciless)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Dirk K. (merciless)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Niklas G. (erlkoenig) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Gugelhupf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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.

Autor: Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Dirk K. (merciless)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Niklas G. (erlkoenig) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
Autor: Dirk K. (merciless)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die STL war wohl ein schlechtes Beispiel.

merciless

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.