Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de ::  C (C89, C99 und C11) ::  #include von Bibliotehken
Antwort schreiben
Benutzername:
Titel:
Nachrichtentext:
  :)  :D  ;)  :(  :p  :mad:  :rolleyes:  :eek:  :confused:  :cool:  :o)  :leak:  :live:  :die:  :idea:  :arrow:  :warning: 
                             
                         
         
           
                             
                             
                             
             


BBCode in diesem Beitrag deaktivieren [BBCode]
Smilies in diesem Beitrag deaktivieren
#include von Bibliotehken and 301617
     


Themen-Überblick 
(Aktualisieren)
Autor Nachricht
worst_case
12:42:52 01.04.2012   Titel:   Zitieren

OK...

Danke
worst_case
rüdiger
12:27:10 01.04.2012   Titel:   Zitieren

Header enthalten normalerweise nur die Deklarationen und erst der Linker fügt die Bibliothek hinzu und er ist so schlau, dass er Funktionen nur einmal einbindet. Was anderes ist es bei inline Funktionen. Die können durchaus mehrfach angelegt werden (siehe unterschied zwischen inline, static inline und extern inline).
worst_case
12:16:01 01.04.2012   Titel:   Zitieren

DirkB schrieb:

Selbst wenn du in deinem Programm 1000000 Mal printf nutz, ist es nur einmal eingebunden.


Hallo.... nur um sicher zu gehen.

datei1.c -> #include <stdio> print wird benutzt
datei2.c -> #include <stdio> z.B. keine Funktion von <stdio> wird benutzt
.......c -> #include <stdio> print wird benutzt
datei9.c -> #include <stdio> print wird benutzt

datei1-9.c werden zu einem Programm (exe) verlinkt.

Die lib stdio wird nur einmal eingebunden, geladen in der exe ???

gruß
worst_case
DirkB
11:44:24 01.04.2012   Titel:   Zitieren

Das #include hat mit dem Linker nichts zu tun.
Das #include ist eine Sache vom Präprozessor und dann vom Compiler.

Der Compiler hinterläßt eine Information, dass er z.B. die Funktion printf() aufruft/benötigt.

Der Linker baut aus diesen Informationen dann das Programm (die exe) zusammen.

Selbst wenn du in deinem Programm 1000000 Mal printf nutz, ist es nur einmal eingebunden.

Der Compiler erkennt auch, aob eine Funktion schon mal deklariert wurde und meckert auch, wenn die Deklarationen unterschiedlich sind.
worst_case
11:35:47 01.04.2012   Titel:   Zitieren

DirkB schrieb:
Mit #include werden keine Biliotheken eingebunden.
Das sind Headerdateien mit Deklarationen von Funktionen und Variablen und Makrodefinitionen.

Da das ganze aber Textersatz ist (die Headerdatei wird an der Stelle wo das include steht in die .c Datei eingefügt) gilt das nur für das jeweilige Modul.

Die Bibliotheken werden vom Linker eingebunden. Und der weiß was er schon eingebunden hat und einmal reicht.


Hallo und vielen Dank für die schnelle Antwort.

d.h.

egal wie oft z.B. die

#include <stdio.h>

eingebunden wird, erkennt der Linker das er diese "Lib" nur einmal braucht ?

C++:
#ifndef
x.y
#endif


Bringt das etwas und wenn ja... wie ist die genaue Schreibweise ??

Gruß
worst_case
f.-th.
09:56:39 31.03.2012   Titel:   Zitieren

Sorry hatte nur
Code:
#ifdev

als vorrangiges Stichwort betrachtet.
Aus welcher Sprache kommt das?
DirkB
09:30:01 31.03.2012   Titel:   Zitieren

Mit #include werden keine Biliotheken eingebunden.
Das sind Headerdateien mit Deklarationen von Funktionen und Variablen und Makrodefinitionen.

Da das ganze aber Textersatz ist (die Headerdatei wird an der Stelle wo das include steht in die .c Datei eingefügt) gilt das nur für das jeweilige Modul.

Die Bibliotheken werden vom Linker eingebunden. Und der weiß was er schon eingebunden hat und einmal reicht.
worst_case
09:02:13 31.03.2012   Titel:   Zitieren

f.-th. schrieb:
Bei den mir bekannte Compilern kann man die Header einfach lesen :confused:
Einfach mal bei dir mit einem Editor bei dir schauen was drinsteht :confused:

Es gibt auch andere Ansätze: Bei C-Quellext würde ich alles weglassen, was nicht der Funktion des Programms dient oder die Lesbarkeit des Quelltextes erschwert.

MfG f.-th.



Hallo,

:confused:

Meine Frage war/ist wenn in mehreren Programmmodulen, die ich beim compilieren verlinke... also zu einem Programm erstelle, die selben Biblioteken mit #include mehrmals deklariert werden, diese Bibliotheken dann einmal geladen werden, oder mehrmals im Speicher stehen ??
Sorry wenn ich mich nicht verständlich ausgedrückt habe :D

Gruß
worst_case
f.-th.
08:37:26 31.03.2012   Titel:   Zitieren

Bei den mir bekannte Compilern kann man die Header einfach lesen :confused:
Einfach mal bei dir mit einem Editor bei dir schauen was drinsteht :confused:

Es gibt auch andere Ansätze: Bei C-Quellext würde ich alles weglassen, was nicht der Funktion des Programms dient oder die Lesbarkeit des Quelltextes erschwert.

MfG f.-th.
worst_case
08:20:34 31.03.2012   Titel:   #include von Bibliotehken Zitieren

Hallo,

mein Projekt hat nun für mich schon sehr große Formen angenommen, darum möchte ich mich mit dem einbinden von Header absichern.

Ich habe mehrerer *.c *.h Programm/Headerdateien die ich miteinander verlinke.
In fast jedem "Modul" brauche ich
z.B.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

d.h egal wie oft ich die Dateien einbinde, sie werden nur geladen, wenn nicht schon geladen (kein unnötiger Speicherverbrauch) ?? , oder muss ich jede
irgendwie mit #ifdev vorher abfragen.
Also, mein Programm läuft super, ich möchte mich hier nur absichern bzw. wenn nötig mein Programm optimieren. :)

Gruß
worst_case

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.