Hallo @all Mache gerade meine ersten Gehversuche mit dem AVR-GCC. Hab eine main.c mit der main(). Diese ruft aus einer screen.c ne Funktion auf, die in der screen.h deklariert ist. Ich verstehe nur nicht, warum ich in der main.c die screen.c includieren muß und nicht wie z.B. bei MS-C++ die screen.h? Funktionieren tut es. Grundsätzlich kann also nix falsch sein. Im Grunde scheint es mir mit #include.c sogar logischer. Vielleicht kann mich jemand aukfklären;-) Vielen Dank! Frank :-)
in screen.h: void foo(void); in screen.c: #include "screen.h" void foo() { } in main.c: #include "screen.h" ... foo(); im Makefile: SRC += screen.c "#include.c" ist nicht gut und auch nicht "logisch"
Wenn man ein *.c includiert, muß man es vom Projekt ausschließen, da sonst der Code zweimal erzeugt wird und dann der Linker meckert. Daher macht man es nicht (ist aber nicht verboten). Um nun die Variablen und Funktionen in einem anderen Objekt bekannt zu machen includiert man dort also nur das *.h. Peter
Btw: in dem Fall wird in der screen.h keine Funktionsdeklaration vorgenommen, sondern lediglich der Prototyp hinterlegt (damit der Compiler weis, welche Parameter die Funktion erwartet). Das "void" in einem Prototypen oder gar in der Funktionsdeklaration wegzulassen ist "old-style", und sollte in C nicht mehr Praktiziert werden.
*.c, *.h sind aber nur Namen, Du könntest sie auch *.code und *.header nennen. Mußt dann bloß dem Compiler sagen, daß es C Sourcen sind (beim GCC: -xc). Peter
@OldBug: doch doch, der Prototyp ist die Deklaration, und diese gehört (für Funktionen, die in mehr als einer Quelle benutzt werden) in eine Headerdatei. Was dort nicht drinsteht ist die Definition (mit einer Ausnahme: bei `inline' deklarierten Funktionen).
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.