Hallo, bitte um Hilfe: Programmiere gerade einen Devicetreiber unter C für einen uC. Wie kann ich bitte in dem Headerfile die Funktion(en) des C-Files richtig deklarieren, wenn Parameter dieser Funktion Zeiger sind ? Danke !
Ganz normal, so wie man eben Zeiger deklariert. header.h ******** void MyFunc( int* First, int* Secnd ); header.c ******** #include "header.h" void MyFunc( int* First, int* Secnd ) { *First = 5; *Secnd = 7; } main.c ****** #include "header.h" int main() { int a, b; MyFunc( &a, &b ); /* a hat jetzt den Wert 5, b den Wert 7 */ return 0; } Steht in jedem noch so grindigem Lehrbuch über C drinnen.
Hallo Karl Heinz, jaja, zunächst mal Danke für Deine Antwort. Hatte einen Denkfehler, den ich einfach übersehen haben. Gefunden habe ich ihn heute morgen, bevor ich hier reingeschaut habe. Ist mir schon klar, dass einfache Erklärungen in einem C-Buch stehen, aber s.o. Zu Deiner Erklärung noch: Es macht keinen Sinn Header.H in Header.C einzubinden. Funktionen in Header.H werden zudem als extern deklariert. Man kann einfach hier nicht um Hilfe bitten ohne einen zugehörigen Spruch zu erhalten... Grüße
> Es macht keinen Sinn Header.H in Header.C einzubinden. O doch, so könnten dort auch Strukturen, Enums und irgendwelche Konstanten deklariert werden, die sowohl für "header.c" als auch für Aufrufer von Funktionen in "header.c" von Interesse sind. > Funktionen in Header.H werden zudem als extern deklariert. Das ist bei Funktionsprototypen implizit und kann daher entfallen. Karl Heinz hat also -wie so oft- einfach nur recht.
> > Es macht keinen Sinn Header.H in Header.C einzubinden. > > O doch, so könnten dort auch Strukturen, Enums und irgendwelche > Konstanten deklariert werden, die sowohl für "header.c" als auch für > Aufrufer von Funktionen in "header.c" von Interesse sind. Ganz abgesehen davon, überprüft dann der Compiler, ob die Funktionsdekleration (also der Prototyp) auch mit der tatsächlichen Funktionsdefinition (also der Implementierung) übereinstimmt. Es soll schon vorgekommen sein, dass man eines von beiden verändert und auf das andere vergisst. Wer also behauptet, dass das keinen Sinn ergibt, hat noch nie seine Zeit damit verbracht, simple Tippfehler stundenlang zu suchen. Man nimmt vom Compiler jede Hilfe an, die man kriegen kann.
Karl heinz Buchegger wrote: > Ganz abgesehen davon, überprüft dann der Compiler, ob die > Funktionsdekleration (also der Prototyp) auch mit der > tatsächlichen Funktionsdefinition (also der Implementierung) > übereinstimmt. Genau so isses, das eigene *.h gehört selbstverständlich mit rein. Der Linker macht ja keine Typüberprüfung mehr, er löst nur die Namen auf. Und findet er sie, ist er glücklich. Peter
Hi außerdem kann es ja sein das eine Funktion die in header.c implementiert ist eine andere Funktion verwendet die eben auch in header.c implementiert ist. Kommt die aufgerufene Funktion im Quelltext nach der aufrufenden kennt sie der Compiler nicht und meckert. Also gehört immer in ein header.c auch ein #include "header.h". Matthias
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.