Hallo Forum, ich beschäftige mich seit kurzem mit C. Daher eine etwas anfängerliche Frage: Ich möchte gerne Funktionen auslagern. Wie macht das üblicherweise in C ? Packt man die in eine Headerfile oder in eine weitere .c File? Wann wählt man eine .c oder .h file? In diesem Tutorial hier: http://www.c-howto.de/tutorial-praeprozessor-dateien-einbinden.html werden Funktionen in die Headerfile ausgelagert. Macht man das immer so? Wann und wie benutzt man dann eine weitere .c file? Ich bedanke mich :) ! Lg
Du benutzt grundsätzlich eigene C-Files für deine Funktionen. Denn der Sinn besteht darin, dass jedes C-File für sich alleine kompiliert werden kann, ohne Ansehen der anderen. Hast du daher 2 Millionen Funktionen, dann bringt es dir nichts, wenn du die in Header Files auslagerst, ausser der bessern Übersicht. Da könnte man gleich alles in einem File lassen, wenn dann im Hauptrpgramm sowieso erst recht wieder alle 2 Millionen Funktionen compiliert werden müssen. Egal ob sie jetzt direkt drinnen stehen, oder ob sie über einen Include reingezogen werden. Aber: Stecken die Funktionen modulweise in ihren jeweiligen C-Files, dann wird bei einer Änderung nur dieses eine Modul neu kompiliert. Das sind dann vielleicht 10 oder 20 Funktionen von den 2 Millionen. Mit den anderen Funktionen muss nichts gemacht werden (sofern sie von der Änderung nicht betroffen sind), die brauchen daher nicht neu compiliert werden. Siehe auch: ## FAQ ## Header_File, wie geht das?
PS: Aus deiner Verlinkung
1 | Meistens werden die Unter-Funktionen in separate Dateien - sogenannte |
2 | Header-Dateien - ausgegliedert. |
Das ist eine grob fahrlässige Verzerrung der Situation. Es gibt Fälle, in denen man Funktionen im Header File lässt. Wenn es gute Gründe dafür gibt, die Funktion kurz ist und man dem Compiler die Gelegenheit geben möchte ein Funktions-inlining durchzuführen. Aber das ist nicht der Regelfall sondern die Ausnahme. Und man muss dann auch den Regeln nach spezielle Vorkehrungen treffen. So wie es da steht, ist das grob fahrlässig falsch vereinfacht dargestellt.
Ich hab ein wenig in diesem C-Howto geschmökert. Kauf dir lieber ein Buch!(*) Da hast du mehr davon. Dieses Tutorial ist genau von der Sorte: die hälfte steht nicht drinnen, und bei dem was drinnen steht ist so manches zweifelhaft beschrieben bzw falsch. Ein gutes C-Buch hat nicht ohne Grund rund 200 DIN-A4 Seiten und wird vom Autor, vom Lektor und von guten Programmierkollegen Korrektur gelesen. (*) aber bitte nicht sein Buch. Denn da steht genau dasselbe drinnen, wie hier online. Mit natürlich genau denselben Fehlern und Ungenauigkeiten.
Noch ein kleiner Tipp für die Fragen "Wann?" und "Warum?": Mach erstmal alles in einer einzigen C-Datei. Wenn du neu bist, hast du reichlich Baustellen, spar dir diese. Wächst dein Programm, wirst du selber merken, dass das irgendwann unübersichtlich wird. Das ist ein guter Zeitpunkt, deine Funktionen thematisch sortiert auf mehrere C-Dateien aufzuteilen, und dann musst du auch zu jeder C-Datei eine passende H-Datei mit den Funktionsprototypen erstellen. Ein zweiter guter Grund wäre, wenn du ein zweites Programm schreibst und Funktionen hast, die in beiden Programmen benutzt werden sollen.
Hallo nochmal. Erstmal vielen Dank euch :) Ja das C-Howto ist nicht so das wahre. Hab mal quer im Netz gesucht, da mir das ganze in "The C Programming Language" doch etwas zu knapp beschrieben war. Der Verweis auf das FAQ hilft mir sehr weiter. Ich danke euch. Lg
Für Anfänger gibt es noch einen kleinen Trick: Sinnvoll ist der aber nur, wenn Du Funktionen abgeschlossen hast und nichts mehr daran machen willst. Der Hauptgrund aber ist: Ich möchte mich nicht jedes mal durch 800 Zeilen hangeln. Hierzu markierst Du Dir einen beliebigen Block, kopierst ihn in eine eigene .c-Datei, löscht ihn und fügst an der Entnahmestelle eine include-Anweisung mit dem Namen der Auslagerungsdatei ein. Eventuell mit vollständigem Pfad. Ein Graus für C'ler aber recht einfach.
amateur schrieb: > Für Anfänger gibt es noch einen kleinen Trick: > Sinnvoll ist der aber nur, wenn Du Funktionen abgeschlossen hast und > nichts mehr daran machen willst. > Der Hauptgrund aber ist: Ich möchte mich nicht jedes mal durch 800 > Zeilen hangeln. > Hierzu markierst Du Dir einen beliebigen Block, kopierst ihn in eine > eigene .c-Datei, löscht ihn und fügst an der Entnahmestelle eine > include-Anweisung mit dem Namen der Auslagerungsdatei ein. Eventuell mit > vollständigem Pfad. > Ein Graus für C'ler aber recht einfach. Hör bitte auf so ein Unfug zu verbreiten. Mehr kann man dazu eigentlich nicht sagen. Außer dass es vielleicht gut wäre, wenn DU dir auch mal ein C-Buch kaufst, die Mods deinen Schmarrn löschen bevor das noch jemand glaubt.
Denke aber daran, die .c auch in deinem Projekt/Makefile einzutragen. Sonst beschwert sich der Linker.
Klaus schrieb: > Hör bitte auf so ein Unfug zu verbreiten. Mehr kann man dazu eigentlich > nicht sagen. Außer dass es vielleicht gut wäre, wenn DU dir auch mal > ein C-Buch kaufst, die Mods deinen Schmarrn löschen bevor das noch > jemand glaubt. Habs jetzt erst gesehen. Wenn ich es rauslösche, wird der Ruf nach Zensur wieder laut. Die entsprechende Antwort auf den Vorschlag wurde ja schon gegeben. Dem ist nichts hinzuzufügen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.