Problem mit dem Auslagern von Funktionen

OP #6746088
Hallo zusammen,

ich bin grade dabei mich mit dem Umgang von Funktionen vertraut zu 
machen. Um den Code kürzer halten zu können und ggf. Funktionen in 
anderen Programmen wieder verwenden zu können, wollte ich diese in einer 
externen c-datei auslagern.
Dafür sollte eine einfache Funktion "berechne", die zwei Werte 
multipliziert, ausgelagert werden.
Mein Vorgehen:

Main:
1
#include <avr/io.h>
2
#include "berechne.h"
3

4
int main(void)
5
{
6
    uint8_t Ergebnis = 0, a = 12, b = 2;
7
    while (1) 
8
    {
9
    berechne(&Ergebnis, a, b);
10
    }
11
}
.c-Datei:
1
void berechne(uint8_t *p_Ergebnis, uint8_t x, uint8_t y){
2
  *p_Ergebnis = x*y;
3
}
.h-Datei:
1
#ifndef BERECHNE_H_
2
#define BERECHNE_H_
3

4
void berechne(uint8_t *p_Ergebnis, uint8_t x, uint8_t y);
5

6
#endif /* BERECHNE_H_ */


Im Anhang habe ich Screenshots von der Fehlermeldung und dem Code 
hinterlegt. Hat irgendwer eine Idee woran es liegen könnte?
Angehängte Dateien:
Gast #6746274
Nächstes mal Quelltext bitte als Text posten, nicht als Screenshot. 
Screenshots sind meistens unvollständig und man kann den Text nicht 
heraus kopieren um das Problem nachzuvollziehen.

Es wurden auch schon Anhänge und ZIP Dateien erfunden.
Gast #6746728
Hannes schrieb:
> Lies den ersten Post erst komplett, bevor Du Dich echauffierst - der TO
> hat den Quelltext mit gepostet, Kollege!

Du hast wohl Recht. Das ist so wenig, dass ich dachte, es seien nur 
Fragmente vom Ganzen.
Gast #6746741
Ansonsten noch für den TO, in den Headern reichen die Datentypen der 
Funktion, die Namen brauchen da nicht rein.
1
void berechne(uint8_t*, uint8_t, uint8_t);
Hätte also auch gereicht, nur muss eben der Datentyp uint8_t bekannt 
sein, also inttypes.h oder stdint.h je nach sonstigem Bedarf in den 
Header mit rein.
Gast #6746797
nicht Gast schrieb:
> Ansonsten noch für den TO, in den Headern reichen die Datentypen der
> Funktion, die Namen brauchen da nicht rein.

Allerdings bringe ich die Dokumentation immer in den Header Dateien 
unter und da gehören dann sprechende Namen für die Parameter dazu.
#6747134
nicht Gast schrieb:
> Ansonsten noch für den TO, in den Headern reichen die Datentypen der
> Funktion, die Namen brauchen da nicht rein.void berechne(uint8_t*,
> uint8_t, uint8_t);

Für den Compiler mag das reichen, für den Menschen, welcher die 
Funktionen benutzen will eher nicht! Schon gar nicht, wenn andere Leute 
sie irgendwann mal benutzen sollen.

Wer exzessiven Minimalismus praktizieren will darf gern Maschinencode 
schreiben, wahlweise auch BO8 Assembler ;-)

https://www.mikrocontroller.net/articles/8bit-CPU:_bo8

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.