PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : nochmal Makros über eigene include-Dateien



09-11-2000, 09:38
Hallo zusammen,

ich bin mal wieder am verzweifeln. Ich habe nämlich aus dem Buch C für PC's ein Programm abgeschrieben, welches folgendes Makro enthält:

# define CLS printf("\033[2J")

In dem besagten Programm funktioniert das auch tadellos! Ich wollte mir nun eine eigene Includedatei anlegen, welche erst mal nur genau dieses Makro enthält. D. h. ich habe mir eine Datei "stefan.h" mit folgendem Inhalt angelegt:

include <stdio.h>

define ... -> siehe oben

Im zweiten Schritt will ich dieses Makro nun in einem einfachen Programm "test.c" aufrufen. Also

# include <stdio.h>
# inlcude <pfad/stefan.h>

int main()
{
CLS;
printf("Hallo Welt!\n");

return 0;
}

So und nun funktioniert das Programm nicht! Ich kapiere einfach nicht warum! Kann es vielleicht am Programmnamen liegen? Ich habe mal irgendwo gelesen, das man Programme nicht "test" nennen soll! Oder habe ich doch irgendwo einen Fehler im Code?

Gruß

Stefan

[Dieser Beitrag wurde von Stefan Feeser am 09. November 2000 editiert.]

09-11-2000, 09:41
sch... wie mache ich denn das man die "Größer" und "Kleiner" Zeichen sieht sprich die HTML-TAG Einleitung kenntlich macht?

Binde über include stdio.h und in "test" stefan.h ein!

thommy
09-11-2000, 10:34
Du musst die Tags direkt in HTML-Code angeben:

< als <

&gt als >

Thomas

PS: Wenn Du es test nennst, dann musst Du es unbedingt mit Pfadnamen aufrufen (also "/pfad/test" oder "./test"), da test ein builtin-Kommando der Bash ist und die Bash bei der Suche nach einem Kommando immer dieses findet.

09-11-2000, 14:22
Hallo Thomas,

vielen Dank für die Tips! Abgesehen von der Testsache ist doch sonst alles korrekt, oder?

... und die < > hab ich auch schon abgeändert http://www.linuxforen.de/ubb/wink.gif

Stefan

Hagen von Tronje
09-11-2000, 18:08
Eigene Include-Dateien werden in Gänsefüßchen gesetzt, System-header in spitzige Klammern,
also:

#include <stdio.h>
#include "pfad/stefan.h"

Hagen

10-11-2000, 09:06
Moin,

das mit den "" hatte ich schon wieder vergessen http://www.linuxforen.de/ubb/wink.gif Trotzdem hat gestern beim Compalieren alles geklappt!

Wie verhält es sich eigentlich wenn ich eine Bibliothek wie die stdio über eine eigene includedatei einbinde, also im eigentlichen Programm immer nur "meine" include-Datei einbinde?

Gruß und vielen Dank

Stefan

thommy
10-11-2000, 09:43
Es spielt keine Rolle, wo Du eine Headerdatei einbindest. Hauptsache die Definitionen sind bekannt, wenn das erste Mal darauf zugegriffen wird.

Allerdings darf eine jede Defintion (und damit eine jede Headerdatei) nur genau einmal in Deinem Programmcode erscheinen. Um dies zu erreichen, versieht man alle Headerdateien mit einem Wächter, der sicher stellt, dass die Datei nur dann eingebunden wird, wenn sie noch nicht eingebunden wurde.

Deine Definitionen in der Headerdatei sollten deshalb immer in folgendem Rahmen stehen:

<pre>
#ifndef EINDEUTIGER_NAME
#define EINDEUTIGER_NAME
/* hier stehen
alle Deine
Definitionen */
#endif
</pre>

Thomas

10-11-2000, 15:09
Nochmals Vielen Dank Thomas, jetzt ist mir einiges klarer!!!

Momentan ist nur schade, daß ich das mit den Escapesequenzen unter NT noch nicht rausgekriegt hab.

Schönes Wochenende

Stefan

15-11-2000, 21:19
hi,

das mit dem define... war mir auch nicht so klar. das wort waechter trifft die sache auf den punkt. so wird sichergestellt, dass eine headerdatei auch nur einmal eingebunden ist.

Franky--;-)

28-11-2000, 19:28
jaja die guten alten Escape-Sequenzen kennt heute kaum noch jemand. Dies sind Sequenzen mit denen Unix (linux) die Terminals steuert. Sie sind jedoch für die Terminals unterschiedlich. Schau mal unter Termcap. Unter Linux verwendet man für so etwas am besten die Curses-Bibliotheken (oder man programmiert gleich mit Fenstern, dort funktioniert es sowie so anders).

Gruss Werner