Forum: PC-Programmierung Funktion in Header auslagern


von crank (Gast)


Lesenswert?

Hallo,

ich habe eine Funktion die ich gerne in eine eigene Header Datei 
auslagern will:

i2cfwrite.h
1
#ifndef __i2cfwrite__
2
#define __i2cfwrite__
3
4
extern void I2C_fwrite(const uint8_t *data); // *1
5
6
#endif

i2cfwrite.c
1
#include "i2c_fwrite.h"
2
3
void I2C_fwrite(const uint8_t *data) { .... } // *2

Aufruf:
1
I2C_fwrite(I2C_DATA); // I2C_DATA = 1kb Array


Fehlermeldung:
*1
../i2c_fwrite/i2c_fwrite.h:6: warning: type defaults to 'int' in 
declaration of 'uint8_t'
../i2c_fwrite/i2c_fwrite.h:6: error: expected ';', ',' or ')' before '*' 
token

*2
../i2c_fwrite/i2c_fwrite.c:3: warning: type defaults to 'int' in 
declaration of 'uint8_t'
../i2c_fwrite/i2c_fwrite.c:3: error: expected ';', ',' or ')' before '*' 
token

Was mach ich falsch?

Danke

von Gast (Gast)


Lesenswert?

extern void I2C_fwrite(const uint8_t *data); // *1

die Deklaration für uint8_t fehlt (der Compiler kann mit diesem Typ 
nichts anfangen). Passende Headerdatei am Dateianfang einfügen.

von Michael H. (mah)


Lesenswert?

Funktionskörper haben in Headern nix zu suchen, nur Deklarationen - wozu 
willst Du das machen? die Funktion quasi als Makro subsitituieren? Wenns 
das ist, sieh Dir mal das 'inline' Attribut an


und poste den gesamten Code - ohne ... dort wo's interessant wird, wir 
sind heute telepathisch schlecht drauf

von Simon K. (simon) Benutzerseite


Lesenswert?

Michael Haberler schrieb:
> Funktionskörper haben in Headern nix zu suchen, nur Deklarationen - wozu
> willst Du das machen? die Funktion quasi als Makro subsitituieren? Wenns
> das ist, sieh Dir mal das 'inline' Attribut an

Quatsch, das Problem hat der Poster über dir schon erörtert. Die 
Typdefinition für uint8_t fehlt am Anfang des Header files.

von Gast (Gast)


Lesenswert?

"Funktionskörper haben in Headern nix zu suchen, nur Deklarationen "

Macht er doch auch nicht: Deklaration steht im Header, Definition im 
C-File.
Er hat nur vergessen, den passenden Header, in welchem uint8_t 
deklariert ist. einzubinden.

von Gast (Gast)


Lesenswert?

ach ja, wenn wir schon dabei sind:

korrekt müsste es, wie Simon bereits schrieb, Typdefinition heißen. 
Sorry.
Der Begriff "Deklaration" der Funktion im Header passt allerdings.

von crank (Gast)


Lesenswert?

Oh das hatte ich total übersehen. Jetzt funktionierts...

Danke

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
Noch kein Account? Hier anmelden.