Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » alle Funktionen in Dlls?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.02.2003, 20:56 Uhr
Christian
C/C++ Master
(Operator)


Hallo zusammen!

Wenn ich in meinem Programm z.B.


Code:

#include <stdio.h>




dann kann ich ja die Funktionen printf(..) und co verwenden. Aber wo werden diese Funktionen definiert? Die gehören doch fest zur Programmiersprache und somit zum Compiler, oder?
Wer bringt Licht ins Dunkel?
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.02.2003, 21:15 Uhr
virtual
Sexiest Bit alive
(Operator)


Im Header stehen zunächst nur die Funktionsdeklarationen. In welcher Library die Functionsdefinitionen stehen, hängt vom Compiler ab. Die gängigen Compiler werden wohl statische und dynamische Libs als alternative anbieten; allerdings könnte ein Compiler auch sagen: "Nee, Libraries kenn ich nicht!".
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.02.2003, 21:36 Uhr
Christian
C/C++ Master
(Operator)


Hallo virtual!

Beispiel:
Ich erstelle das typische Hello World Programm mit printf(..). Mir ist klar, dass das in der headerdatei zunächst nur die Deklaration der Funktion steht. Ist es nun so, dass auch bei diesen stdio-Funktionen die Funktionsdefinitionen in DLLs stehen (mit Lib) oder gehören die standardmäßig zum Funktionsumfang von C/C++, so dass der Compiler beim Aufruf dieser Funktionen bereits irgendwie intern die Deklarationen kennt?

Ich hoffe du versteht was ich meine.

Grüße Chris
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.02.2003, 23:43 Uhr
Hans
Library Walker
(Operator)


Hallo Christian,

ich bin zwar nicht Virtual, (und bei weitem nicht so gut... ;-)) aber ich glaube ich hab die Frage auch verstanden.
Nehmen wir zum Beispiel mal die Compiler von Borland. Da hast Du zunächst einmal des Unterverzeichnis /include, wo sämtliche Include-dateien drin stehen. Dann gibt es da noch ein Unterverzeichniss /Lib, wo dieverse obj-Dateien drin stehen, und auch einige mit der Endung lib. Aus diesen lib-dateien holt der Linker den Code für die Bibliotheksfunktionen, die Dein Programm aufruft, wenn er ein Programm erstellt. Ob es sich dabei um eine ausführbare Datei, oder eine DLL handelt, kann man noch irgendwo einstellen. (Für eine DLL muss man, glaube ich, auch noch ein paar Dinge im Quelltext berücksichtigen, die man sich bei einer reinen Exe-Datei sparen kann. Da bin ich mir jetzt aber nicht ganz sicher, weil ich es noch nicht gemacht habe.)

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.02.2003, 08:34 Uhr
~gast
Gast


Soweit ich weiß war das von Hans fast richtig ;-)
Also wenn du eine Headerdatei includest ist das genau dasselbe als hättest du den Code in der Headerdatei (also alle Deklarationen und Definitionen) an dieser Stelle in deinem Programm selber geschrieben. Dadurch weiß der Compiler das diese Funktion irgendwo existiert, welche Parameter sie erwartet und was sie zurückgibt.
Wenn es nach dem Compilieren ans Linken geht, schaut der Linker alle ihm übergebenen .Lib Dateien nach diesen Funktionen durch. In den Lib Dateien
findet er eine Art Weiterleitung (weiß nicht wie ichs besser sagen soll) zu der entsprechenden DLL Datei in der die Funktion Definiert ist.

Ob bestimmte Grundlegende Funktionen direkt intern bekannt sind weiß ich nicht, ich glaube aber eher nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.02.2003, 10:02 Uhr
~StefanD
Gast


Soweit ich weiß, bleibt es dem Compiler-Hersteller überlassen, wie er die Standardlibraries (bzw. die Funktionen daraus) implementiert. Die Funktionen, Klassen usw. müssen nur existieren und auch funktionieren, wenn man die entsprechenden Header einbindet. Ein Hersteller könnte also durchaus bestimmte Dinge direkt implementieren, ohne den "Umweg" über eine DLL. Und dies wird im Falle der STL normalerweise auch getan, da steht aller (oder wenigstens der meiste) Code direkt im Header. Es muß nach meiner Kenntnis nicht einmal die Standardheader irgendwo physisch geben. Ist alles Sache der Implementierung.


Stefan.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.02.2003, 12:33 Uhr
~christian
Gast


Hallo!

Danke erstmal für die Antworten.

Ja, mir geht es jetzt einmal konkret um den Standardheader <stdio.h>.
Bei der STL handelt es sich ja um spezielle Klassen und Funktionen, die eben nicht zur Ausgabe oder sonstwas verwendet werden sondern für spezielle Algorythmen oder Datenspeicherung. Da kann ich mir sehr gut vorstellen, dass man in sein Programm den kompletten Code der STL aufnimmt. (per include)

Zurück zu meiner Frage:
In der stdio.h ist ja die Definition der printf(..) und co nicht vorhanden. Dann ist es also so, dass das Sache der Compiler ist, wo er diese Definitionen herzaubert. Hab ich das richtig verstanden?

Grüße
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.02.2003, 12:42 Uhr
virtual
Sexiest Bit alive
(Operator)


Zurück zu Deiner Frage:
Ja.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: