Hallo, ich schreibe gerade eine eigene Header-Datei in C: Müssen dabei die Funktionsprototypen mit ´extern´ deklariert werden oder nicht oder ist das egal. Ich habe das mal so und mal so gesehen. Vielen Dank Gast_1
Gast_1 wrote: > Müssen dabei die Funktionsprototypen mit ´extern´ deklariert werden oder > nicht oder ist das egal. Nein, sie müssen nicht. Und wenn man sich vor Augen führt, was das extern überhaupt für eine Funktion hat, dann wird das auch klarer. extern dient eigentlich nur dazu, dass der Compiler weiß, dass es sich um eine Deklaration handelt und nicht um eine Definition. Deklarieren darf man ein Objekt schließlich beliebig oft, während es genau einmal definiert werden muss. Bei Funktionen kann der Compiler aber schon aus der Syntax ableiten, ob es Definition oder Deklaration ist (wenn der Funktionskörper fehlt, ist es eine Deklaration, also ein Prototyp). Bei Variablen kann er das nicht, weshalb da das extern erforderlich ist. > Ich habe das mal so und mal so gesehen. Man kann es machen, es bringt aber nichts.
Hallo Johannes, danke für die schnelle Antwort. In meinem "schlauen" C-Buch steht nämlich: "extern ... geht einem Funktionsprototypen voraus, wenn sich die Funktionsdefinition in einer anderen Datei befindet". Und das ist doch eigentlich hier der Fall, denn die Funktionsdefinition befindet sich ja in der anderen *.c-Datei und nicht in meiner eigentlichen (Haupt)Programm-Datei. Aber meinem Compiler scheint es auch egal zu sein. Danke Gast_1
Gast_1 wrote: > "extern ... geht einem Funktionsprototypen voraus, wenn sich die > Funktionsdefinition in einer anderen Datei befindet". Wie gesagt, man kann es machen, vielleicht, um explizit zu kennzeichnen, dass eine Funktion in einer anderen Datei definiert ist. Allerdings sollte man sowieso zu jeder Quelldatei, die Objekte enthält, die von anderen Projektteilen verwendet werden können sollen, eine Headerdatei mit allen relevanten Deklarationen schreiben. Und in eine Headerdatei gehören nunmal nur Deklarationen und keine Definitionen. Dass die Definition sich in einer anderen Datei befindet, ist in dem Fall also selbstredend und muss nicht extra erwähnt werden... > Aber meinem Compiler scheint es auch egal zu sein. Das hat ihm auch egal zu sein.
Deklarationen von Funktionen (also: int f();) werden immer als extern betrachtet, deshalb ist es hier egal, ob man es dazu schreibt oder nicht. Einen Unterschied macht es nur bei globalen Variablen: hier ist es ohne extern eine Definition (int i;), mit eine Deklaration (extern int i;). Eine spätere Definition der Funktion oder Variable (dann ohne extern) hebt das eventuelle vorherige extern einfach stillschweigend auf. Deshalb ist es unkritisch, in einer Headerdatei etwas mit extern zu deklarieren und in einem Quelltext nach dem #include die Definition nachzuholen (natürlich nur in einem Quelltext).
Schönen Dank für die Antworten. Wie gesagt: in meinen C-Büchern hörte sich die Verwendung von ´extern´ "ZWINGEND" an. Nun weiß ich Bescheid. Danke Gast_1
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.