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     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
worst_case
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.06.2001
Beiträge: 329
Beitrag worst_case Mitglied 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

_________________
worst_case
f.-th.
Unregistrierter




Beitrag f.-th. Unregistrierter 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
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.06.2001
Beiträge: 329
Beitrag worst_case Mitglied 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

_________________
worst_case


Zuletzt bearbeitet von worst_case am 09:02:49 31.03.2012, insgesamt 1-mal bearbeitet
DirkB
Unregistrierter




Beitrag DirkB Unregistrierter 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.
f.-th.
Unregistrierter




Beitrag f.-th. Unregistrierter 09:56:39 31.03.2012   Titel:              Zitieren

Sorry hatte nur
Code:
#ifdev

als vorrangiges Stichwort betrachtet.
Aus welcher Sprache kommt das?
worst_case
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.06.2001
Beiträge: 329
Beitrag worst_case Mitglied 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

_________________
worst_case
DirkB
Unregistrierter




Beitrag DirkB Unregistrierter 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
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.06.2001
Beiträge: 329
Beitrag worst_case Mitglied 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

_________________
worst_case


Zuletzt bearbeitet von worst_case am 12:16:49 01.04.2012, insgesamt 1-mal bearbeitet
rüdiger
Moderator

Benutzerprofil
Anmeldungsdatum: 11.07.2001
Beiträge: 23069
Beitrag rüdiger Moderator 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
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.06.2001
Beiträge: 329
Beitrag worst_case Mitglied 12:42:52 01.04.2012   Titel:              Zitieren

OK...

Danke
worst_case

_________________
worst_case
c++.de :: C (C89, C99 und C11) ::  #include von Bibliotehken   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

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.