mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Funktionsdeklaration


Autor: auBacke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 !

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: auBacke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> > 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.