[C] Header Datei schreiben

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • [C] Header Datei schreiben

    Hallo @ all

    Ich habe gerade eine Funktion geschrieben it der man ein Passwort einlesen kann. Diese sieht so aus:

    Source Code

    1. #include <stdio.h>
    2. char Passwort(char cPasswort[], int iLaenge)
    3. {
    4. char cTaste;
    5. int il, iloeschen=0;
    6. for (il=0;il<iLaenge;il++)
    7. {
    8. cTaste = getch(); //Taste auslesen
    9. If (cTaste == *MUSS ICH NOCH SUCHEN*) //Zahl für Leertaste suchen
    10. {
    11. printf("\7"); //Beep
    12. il--;
    13. }
    14. else if (cTaste == 8) //Backspace
    15. {
    16. if (iloeschen>0)
    17. {
    18. printf("\b \b"); //Curser zurück => überschreiben => Curser zurück
    19. cPasswort[il-1]=' ';
    20. il-=2;
    21. iloeschen--;
    22. }
    23. }
    24. else if (cTaste == 13) //Enter
    25. {
    26. break; //Schleife abbrechen
    27. }
    28. else
    29. {
    30. cPasswort[iloeschen]=cTaste; //Buchstabe wird gespeichert
    31. printf("*"); //Statt Buchstabe wird * ausgegeben
    32. iloeschen++;
    33. }
    34. fflush(stdin);
    35. }
    36. return (cPasswort);
    37. }
    38. int main()
    39. {
    40. char cPass[80];
    41. int il, ilaenge;
    42. ilaenge=sizeof(cPass)/sizeof(char);
    43. for (il=0;il<ilaenge; il++)
    44. cPass[il]=' ';
    45. printf("Passwort: ");
    46. Passwort(cPass, ilaenge);
    47. printf("\n\n");
    48. for (il=0;il<ilaenge; il++)
    49. printf("%c", cPass[il]);
    50. getchar();
    51. }
    Display All


    Nun möchte ich nicht immer diese ganze Funktion schreieben und habe dessweegn gedacht, sie vllt in eine Header Datei zu packen. Geht sowas? Das ich einfach immer über mein Projekt

    #include <passowrt.h>

    schreibe und dann über diesen Befehl

    Passwort(cPass, ilaenge);

    die Funktion aufrufe? Wenn das geht wie kann man das machen? Habe zwar schon eigene Header geschrieben allerdings sahen die so aus das ich einfach die benutzten Header Datei reinkopiert habe und die Funktionsköpfe. Wenn die Dateien im gleich Ordner lagen ging das wunderbar. Aber jetzt will ich ja eine komplett eigene Header Datei schreiebn. Das habe ich noch nie gemacht.

    Hoffe auf eure Hilfe. Viele Grüße
    Crosaider
  • compiler ?

    ansonsten halt einfach ne headerdatei mit .h endung erstellen und dann wie du ja bereits sagtest mit dem include befehl einfügen. die headerdatei muss natürlich noch im richtigen verzeichnis liegen, sodass sie später dann auch vom präprozi gfunne wird.

    bei entwicklungs umgebungen wie visual c++ geht das alles ganz einfach.
  • Eine Header-Datei ist im Grunde nichts anderes als ausgelagerte Funktionen (outsourcing ist das größte :D )

    jetzt mal aus Sicht der VC++ IDE:

    Neue Datei, deine Funktionen Schreiben und in deinen fall einfach als "password.h" abspeichern. Dann eben, wie du schon sagtest, mittels '#include' einbinden und viola...wir haben erfolgreich outgesourced ^^.
    Was ich nun leider nichtmerh weiß aber bezweiflen wage, dass man einen Funktionsprototypen in der Header braucht. Müsste man sich erkundigen

    Wie ich gern zu sagen Pflege: "Im zweifelsfall ausprobieren!" ^^
    If a packet hits a pocket on a socket on a port, and the bus is interrupted and the interrupt's not caught,
    then the socket packet pocket has an error to report
  • Für alle die nicht wissen, wie man eine Headerdatei schreibt, hier nochmal verdeutlicht:


    Source Code

    1. //hello.h
    2. #ifndef _HELLO_H_
    3. #define _HELLO_H_
    4. void hello()
    5. {
    6. printf("Hello World\n");
    7. getch();
    8. }
    9. #endif
    Display All



    Source Code

    1. //main.c
    2. #include <conio.h>
    3. #include "hello.h"
    4. //Hier wird die Header Datei hello.h eingebunden
    5. int main()
    6. {
    7. hello(); //hier rufen wir die Funtion hello(); auf
    8. return 0;
    9. }


    Ich habe schon verstanden, was die Profis gesagt haben, aber ich hatte keine Lust jetzt eine Riesenfunktion für ein kleines Beispiel zu schreiben,
    das nur zeigen soll wie man in C eine Headerdatei schreibt.
    mfg Pokertom
    Du bist Terrorist, warum? Siehe hier
  • @pokertom
    du meinst wohl ein Beispiel wie man es nicht macht ;)

    In der Headerdatei werden nur die "Funktionsköpfe" definiert.
    Der "Rumpf", also die eigentliche Implementierung sollte in einer extra Datei.


    Source Code

    1. //hello.h
    2. #ifndef _HELLO_H_
    3. #define _HELLO_H_
    4. void hello();
    5. #endif


    Source Code

    1. //hello.c
    2. #include "hello.h"
    3. void hello()
    4. {
    5. printf("Hello World\n");
    6. getch();
    7. }
  • guten,

    hätte da auch gleich ne frage zu diesen bedingten makros. also das hier:

    Source Code

    1. #ifndef _HELLO_H_


    zwei fragen hierzu:

    1. diese _HELLO_H_ konstante, wo kommt die her bzw. ist das eine art konvention ? ich verstehe nicht wirklich wo die herkommt. in büchern zu diesem thema sehen die defs aber auch genauso aus, mit diesen unterstrichen. also semantisch kann ich mir nun ausmalen was das heisst, nämlich frägt er da ja dann ob hello.h noch nicht eingebunden wurde. das soll den zweck haben, so hab ich weiter gelesen, dass die hello.h datei nich mehrmals definiert wird. könnte mir da mal jemand nen quellcode schreiben, der absichtlich nen fehler provoziert ? ich meine es macht doch nichts aus wenn ich zwei module habe, und in jedem die hello.h "reininclude". dann steht der code eben zweimal da ? so als provozierende frage. natürlich weiss ich dass da dann der code doppelt da steht bzw. mehr speicher verbraucht wird. aber wie ist es denn mit den adressen z.b.. wenn ich hello.h in modul 1 und 2 definiere, dann beutzt modul2 doch ne andere adresskonvention als modul1, oder ? hoffe man kann einigermaßen verstehen was ich meine.

    2. dann wenn der compiler die oben besagte anweisung erreicht, und dann dieses ifndef sieht, und nachschaut ob die headerdatei schon definiert wurde, setzt der compiler dann _HELLO_H von 0 auf 1 oder sowas, oder ändert er dann den wert, sodass er falls er nochmal drüberstolpert, dann merkt dass er die datei schonmal eingebunden hat ? oder bin ich jetzt total auf dem falschen pfad.

    und ja eigentlich sinds in 1 mehrere fragen aufeinmal. sorry ^^ hab mich mit der thematik noch nie so richtig befasst wenn ich ehrlich bin und beim lesen heute hab ich nicht wirklich antworten zu ein paar sachen gefunden, die ich mich so dazu gefragt habe.

    gruß
  • Dass die Konstante _HELLO_H_ heißt ist reine Konvention, man kann das prinzipiell nennen wie man will. Man lehnt es aber halt an den Dateinamen an, um zu verhindern, dass zwei verschiedene Header-Files die gleiche Konstante verwenden (weil dann ja nur eins von beiden verwendet werden würde).

    Ohne es zu testen glaub ich, dass der Compiler sich beschweren würde, wenn Präprozessor-Konstanten und Funktionsköpfe mehrfach definiert würden. Daher verhindert man das durch das ifndef.
  • ok. ich hatte die konstante _HELLO_H_ falsch interpretiert. hatte mich zu sehr an die defines aus meinem source code hier gewöhnt. dachte die käme von irgendwo aussen her, wäre irgendwie in einer standarddatei definiert, und immer wenn man einen unterstrich schreibt oder so, dann würde dass der compiler als selbstdefinierte konstante erkennen und dann einen wert zuweisen, der dann nach dem not def, wo ich dann gedacht hab das wär null, auf den wert eins gesetzt wird :D

    naja ganz wirr. jetzt weiss ich wies gemeint ist.

    gruß

    The post was edited 2 times, last by user_z0 ().