Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Headerfile und Library

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 ] [ 2 ] > 3 <
020
22.04.2004, 10:06 Uhr
RHBaum



@beef
Ok, bisserl mutwillen steckt aber schon dahinter

Und an C Funktionen hab ich an der stelle wirklich ned so gedacht :-)
C schreib ich ned so oft ... bzw wuerde jeder c compiler meckern weil ich automatisch eh c++ techniken einsteze :-)

Ich dachte eher an klassen, wo ueber den klassennamen eh schon nen hoffentlich eindeutigen Identifier hast, und naja C++ segnet uns ja mit namespaces

Warum und wann ich eben deklaration und definition zusammenlege ist bei bei Hilfsklassen die ich recht haeufig verwende.
Weil ich eben keine lib zu haben will, oder einbinden mag wenn ich die Klassen nutze. Und dann noch den aerger mit der passenden Version, dass die linker Symbole Stimmen, also singelthreaded/multithreaded debug oder nich ... Das mag ich mit einfach sparen ....

@Mike
Ne lib ist einfach nur ne Zusammenfassung von mehreren obj Dateien. der compiler kann zur compilzeit nicht bestimmen, was in deiner lib drinnensteckt. im gegenteil, der compiler weiss zur compilezeit gar ned, welche lib spaeter hinzugelinkt wird. Das weiss erst der Linker. Deshalb brauchst du die Header, um zu wissen was deine lib kann, die du spaeter hinzulinkst.
(Namen der funktionen, parameter) Zusaetzlich koennen in so nem Header noch praktische Hilfsmittel drin sein, die dir die arbeit mit deiner Lib vereinfachen (typdefinitionen, makros)
Es ist durchaus auch moeglich, und sogar praxis, das du mehrere libs hast, die ein und das selbe implementieren, also die selben H datein haben (unterstuetzen) ... aber intern anders funktionieren. Und du erst beim linken die durch auswahl der geeigneten lib die funktionalitaet bestimmst.
Wird aber ned so haeufig mehr eingesetzt, weil du das eben beim linken schon bestimmen musst, dynamische bibos sind da noch flexibler, da kannst zur laufzeit bestimmen welche eingehaengt wird ...

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
23.04.2004, 00:16 Uhr
~The Mike
Gast


Hi again,

OK, ich habs kapiert. Allerdings habe ich mich jetzt mal etwas genauer mit Libraries in C++ beschäftigt. Man findet für statische Libraries überall nur die *.lib. Rein aus Interesse würde mich interessieren, ob es noch andere gibt?

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
23.04.2004, 02:09 Uhr
0xdeadbeef
Gott
(Operator)


@RHBaum: Das ändert immer noch nichts daran, dass du die Implementierung in eine source-datei schreiben solltest. Wann immer du eine Implementierung in einer Header-Datei hast und diese Header-Datei mehr als einmal einbindest, wirst du linkage-Fehler kriegen.

@Mike: Ich nehme an, du meinst .a-Dateien. Ja, um die gehts dabei. Die Header brauchst du nur, damit dein Compiler damit klar kommt.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
023
23.04.2004, 14:13 Uhr
~The Mike
Gast


Hi,

Der Sinn von Header und Library sollte nach diesem Thread jedem klar sein. Ich meinte statische Libraries heissen unter Windows .lib und unter Unix .a. Ich wollte wissen, obs noch andere gibt?

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
024
23.04.2004, 15:16 Uhr
0xdeadbeef
Gott
(Operator)


Es gibt noch dynamisch ladbare Bibliotheken. Unter Linux heißen sie .so, Windoze nennt sie .dll, andere Systeme noch anders. Das ist für Plugin-Geschichten interessant, weil ein Programm u.U. auch laufen kann, wenn die Bibliothek nicht da ist, nur halt mit eingeschränkter Funktionalität.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
025
23.04.2004, 16:53 Uhr
RHBaum



@beef

Zitat:

Das ändert immer noch nichts daran, dass du die Implementierung in eine source-datei schreiben solltest. Wann immer du eine Implementierung in einer Header-Datei hast und diese Header-Datei mehr als einmal einbindest, wirst du linkage-Fehler kriegen.



Aehm, iss mir noch nich aufgefallen .... und waer auch katastrophal, dann wuerden templates ueberhaupt nimmer funktionieren ??? bisher hatte ich weder mit VC++ 6.0 noch mit dem gcc probleme.
Veilleicht reden wir aneinander vorbei ?
Include Guards nutz ich schon ... :p

// MyHelpclass.h

C++:
#ifndef __MYHELPCLASS_H_
#define __MYHELPCLASS_H_

class MyHelpClass
{
public:
    MyHelpClass():m_test(0){};
    virtual ~MyHelpClass(){};

    void setTest(int iValue)
    {
        m_test = iValue;
    };
    int getTest() const
    {
        return m_test;
    };
private:
    int m_test;
};

#endif



Also die hab ich ohne probleme in 25 andere header drinnenstehen und mindestens 50 andere cpp dateien includieren die direkt oder indiriekt.
Unter VC6.0 ist das wohl kein problem .... unter gcc muesst ich gucken, ober er #ifndef schluckt ....

Ciao....

Dieser Post wurde am 23.04.2004 um 16:54 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
026
23.04.2004, 18:02 Uhr
0xdeadbeef
Gott
(Operator)


#ifndef ist nicht das Problem, aber du hast das Symbol nachher trotzdem in 50 verschiedenen Modulen. Und der Linker weiß nachher nicht, welches dieser 50 Symbole er benutzen soll.

Bei templates ist das was anderes, weil der Code da nachher sowieso noch konkretisiert werden muss und daher quasi alles Deklaration ist.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 23.04.2004 um 18:03 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
027
26.04.2004, 09:40 Uhr
RHBaum



@beef

Zitat:

Und der Linker weiß nachher nicht, welches dieser 50 Symbole er benutzen soll.


Hasst du mal nen Beispiel wo es nicht funzt ? Wahrscheinlich bin ich zu bloed zu, oder ueberseh nen Detail ... Hab grad ne lib gebaut die sone klasse includiert, und ne exe, die auch die klasse nutzt. Konnte die lib ohne probleme zu der exe linken ... VC 6.0 ....

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 <     [ 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: