PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C] Eigene "mylib.h" erstellen


Mark
2010-12-03, 12:59:14
gelöscht

dogmeat
2010-12-03, 13:11:32
Liegt die auch im gleichen Dir wie die deine Source? Meistens gibt es noch ein src/ dir im Projektordner.

Mark
2010-12-03, 13:26:48
gelöscht

Funky Bob
2010-12-03, 13:39:22
Normalerweise hast du soetwas wie
mylib.h
int errorFunc(char* errorMsg);
int add(int a, int b);
und im gleichen Ordner
mylib.c
int errorFunc(char* errorMsg) {
printf(Errorcode: %s\n", errorMsg);
return 0;
}
int add(int a, int b) {
return a+b;
}


Die Dateien müssen immer in den Projaktpfad mit eignefügt werden, alternatic ins globale Includeverzeichnis des Compilers.

Mark
2010-12-03, 13:54:25
gelöscht

Simon
2010-12-03, 15:13:23
Aber würde es nicht ausreichen nur die Definition in die .h zu schreiben und die zugehörige .c einfach wegzulassen?
Nein. Wenn du die Header-Datei dann zwei Mal einbindest, hast du zwei Definitionen, was beim Linken nicht mehr funktioniert, da die Symbole nicht eindeutig sind.

Deklaration immer in Header. Definition in extra Source Files.

Coda
2010-12-03, 15:13:58
Edit: Ich war verwirrt. Mark, du meinst "Definition in der .c und Deklaration in der .h".

funky bob @ nb
2010-12-03, 17:12:32
Was bei der mylib.h noch wichtig ist:
#ifndef __MYLIB_H__
#define __MYLIB_H__

Code

#endif

Damit du die h immer nur maximal einmal einbinden kannst und keine Schleifen bilden kannst.

Simon
2010-12-03, 19:02:55
Was bei der mylib.h noch wichtig ist:
#ifndef __MYLIB_H__
#define __MYLIB_H__

Code

#endif

Damit du die h immer nur maximal einmal einbinden kannst und keine Schleifen bilden kannst.
#pragma once unterstützt jeder halbwegs moderne Compiler und hat mehrere Vorteile gegenüber Include Guards:

weniger Code
Keine Namenverdoppelung oder obskure Regeln an die man sich beim Erstellen der Include Guards halten muss
Verbesserter Compile Speed, da die Include Datei auch nur wirklich einmal gelesen und ausgewertet wird. Mit Include Guards muss die Datei für jedes Einbinden eingelesen und ausgewertet werden. GCC hat spezielle Optimierungen für Include Guards, so dass dort das pragma eventuell nicht so viel bringt.