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 ]
010
20.04.2004, 10:46 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
~Matze postete
1.) Die Verwendung von Prototypen nicht zwingend notwendig.


Jain: In C gebe ich Dir bedingt recht (wenngleich nach dem neuen Standard auch hier prototypen vorgesehen sind, was allerdings die meisten Compiler schlabbern), in C++ stimmt dies keinesfalls


Zitat:
~Matze postete
2.) Die Standardlibraries werden automatisch mitgelinkt.


Ack.
--
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
011
20.04.2004, 10:47 Uhr
Pablo
Supertux
(Operator)



Zitat:
~Matze postete
2.) Die Standardlibraries werden automatisch mitgelinkt.

Sofern meine beide Aussagen stimmen, gibt sich für mich folgende Frage:
//Am Beispiel math.h
Im Headerfile stehen nur die Prototypen. Die eigentliche Library wird als Standardlibrary mitgelinkt.


Das stimmt nicht ganz. Es hängt vom Linker ab. Beim gcc musst du explizit angeben, dass du math.h verwendest und dass du diese Lib. linken willst.


C++:
....
x = pow(2,3);
....




bash:

$ gcc datei.c -c // wird nur kompiliert
$ gcc -o bsp datei.o -lm // ohne -lm kann nich gelinkt werden



Wie typecast sagte, es ist nicht notwenidg, aber ohne sie könnte der Compiler nie richtig auf die Datentypen überprüfen und zumidnest beim gcc) bekommst laut Warnungen deshalb.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
20.04.2004, 13:24 Uhr
~Torsten W.
Gast


ich glaube ich habs kapiert. Vielen Dank. Eine letzte Frage:

RHBaum schrieb

Zitat:

Du kannst in der H. Datei deine funktion deklarieren ... und sie auch definieren, also coden. Definierst du in deiner .H datei deine funktionen / Methoden nur, brauchst du den Binaeren code noch dazu.



Ich hoffe Du hast Dich vertippt, ansonsten habe ichs doch nicht kapiert
Meintest Du: Deklarierst du in deiner .H datei deine funktionen / Methoden nur, brauchst du den Binaeren code noch dazu?

In der Antwort auf Matze schreibt typecast

Zitat:

Er überlässt es dem Linker sich davon zu überzeugen, dass die Fuktionen die durch Prototypen deklariert worden sind, auch implementiert wurden.



Deklaration ist klar und benennt den Prototyp.
Aber was ist mit Definition und Implementierung?
Meint Ihr das gleiche?

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
20.04.2004, 14:06 Uhr
Pablo
Supertux
(Operator)


Nein. Deklaration ist die soz. die Vorstellung an den Compiler, dass es eine Funktion gibt. Bsp:


C++:
int verdoppeln(int x);



Das teilt dem Compiler mit, dass es irgednwo eine Funktion verdoppeln geschrieben wurde, damit der Compiler überprüfen kann, ob die Datentypen stimmen, wenn man sue aufruft.


C++:
int verdoppeln(int x)
{
    return 2*x;
}


ist die Definition der Funktion int verdoppeln(int x);

Meistens schreibt man in den H Dateien nur die Deklaration. Man kann aber auch die Definition schreiben, sollte man aber nicht, weil wenn du falsch die #include Anweisungen benutzt, dann kommt es zu Redeklaration von den Funktionen und somit wird dein Programm nicht kompiliert.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
20.04.2004, 14:44 Uhr
~Torsten W.
Gast


Soweit klar. Dann kann man also sagen, daß die Definition der Funktion auch gleichzeitig die Implementierung meint, oder?

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
20.04.2004, 15:05 Uhr
Pablo
Supertux
(Operator)


Ja
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
21.04.2004, 10:29 Uhr
RHBaum



@ Torsten

Zitat:

Ich hoffe Du hast Dich vertippt, ansonsten habe ichs doch nicht kapiert


Ok, mitgelesen und aufgepasst ! Muss deklarieren heissen an der Stelle !
Wollt ja nur testen .... aehm Asche auf mein Haupt.

Deklarieren = Bekanntmachen
Definieren = Implementieren = coden

zumindest bei C++ isses so. Bei Pascal hab ichs glaub ich mal anders gelernt :p Bin mir aber nimmer so sicher ...

Ciao ....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
21.04.2004, 16:59 Uhr
0xdeadbeef
Gott
(Operator)



Zitat:
RHBaum postete
Ob man im header/code immer trennen sollte ???


Ja, und zwar aus folgendem Grund:

C++:
/* header.h */
void print_hello() {
  puts("Hello, World!");
}
void print_hello_twice();



C++:
/* modul1.c */
#include "header.h"
void print_hello_twice() {
  print_hello();
  print_hello();
}



C++:
/* modul2.c */
#include "header.h"

int main() {
  print_hello_twice();
  return 0;
}


Gibt nachher:

Code:
$ gcc *.c
/tmp/cchP7FTG.o(.text+0x0): In function `print_hello':
: multiple definition of `print_hello'
/tmp/cc5sLtiq.o(.text+0x0): first defined here
collect2: ld returned 1 exit status


Quod erat demonstrandum.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
22.04.2004, 02:11 Uhr
~The Mike
Gast


Servus,

@0xdeadbeef


Zitat:

Wenn daraus später ne library wird (was ja nicht immer der Fall ist), reicht die Library (also der Binärcode) aus, um Programme damit laufen zu lassen. Um Programme zu entwickeln, die die library benutzen, braucht man die Header.



Vielleicht sollte ich erstmal erwähnen, daß ich noch ziemlich in den Kinderschuhen stecke, was C++ betrifft. Vielleicht kannst Du/Ihr mir ja helfen da raus zu wachsen

Also: Habe ich das richtig verstanden?
Du meinst ich schreibe ein Programm, das zu einer Library wird, die dann von anderen Programmen verwendet wird? Ich denke mal Du redest von einer statischen Library (also einer .lib)? Soweit richtig?
Wieso brauche ich um diese Library zu benutzen nur die Headerfiles? Ich habe doch dann nur die .lib, die ich einfach dazulinken muss. Oder habe ich da etwas falsch verstanden?

Gruss und Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
22.04.2004, 02:18 Uhr
Pablo
Supertux
(Operator)


Weil in den Header Files die Deklaration der Funktionen, Variablen und Klassen einer Libs. enthalten und ohne sie der Compiler nicht auf den Ruckgabetyp verifizieren kann.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
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: