header file erzeugung

Gast #982743
Lesenswert?

Hallo!
Vielleicht kann mir hier jemand helfen (schon mal danke im Vorraus)!

test.c:
void ab(void);
uint32_t auf(void);
void gerade(wert3);
volatile float wert1;
volatile uint32_t wert2;
volatile uint32_t wert3;

test.h:
#ifndef INCLUDED_blabla
#define INCLUDED_blabla
float_wert1;
uint32_t_wert2;
uint32_t_wert3;

extern void gerade(wert3);
void ab(void);
uint32_t auf(void);
#endif

file.c:
hier ruf ich z.B. gerade(200) auf aber es kommt folgende fehlermeldung:
undefined reference to gerade

hab ein bischen herumprobiert mit static, inline, extern, aber bekomme 
den Error nicht weg.
Vielleicht kann mir jemand erklären wie ich das Header file richtig 
anlege, lg
#982824
Lesenswert?

Rene wrote:
> uint32_t_wert2;
> uint32_t_wert3;
Was sollen denn die beiden Zeilen?

Generell gehören in eine Headerdatei nur Deklarationen und keine 
Definitionen. Es mag zwar Ausnahmefälle geben, in denen es Sinn machen 
kann, auch Definitionen dort unterzubringen, aber im Regelfall ist das 
Mumpitz.

Wenn man ein Projekt aus mehreren Sourcen hat, dann wird für jede 
einzelne Quelldatei (sofern erforderlich) eine Headerdatei angelegt, in 
der die Deklarationen von Variablen und Funktionen, die auch für andere 
Module zugänglich sein sollen, angegeben werden. Eine Variable bzw. 
Funktion darf in einem Projekt nur einmal definiert werden, aber 
beliebig oft deklariert.

Abgesehen davon kann man aus Deinem Geschreibsel oben überhaupt nicht 
erkennen, was das ganze eigentlich soll.
#982825
Lesenswert?

Rene wrote:
> hab ein bischen herumprobiert mit static, inline, extern, aber bekomme
> den Error nicht weg.
Rumprobieren bringt beim Programmieren auch in den seltensten Fällen 
etwas, v.a. dann nicht, wenn man überhaupt keinen Schimmer hat, was 
static, inline, extern usw. überhaupt bedeuten! Besorg Dir ein gutes 
C-Buch und eigne Dir die Grundlagen systematisch an.
Persönliche Seite #982829
Lesenswert?

probier mal:

test.c:
1
volatile float wert1;
2
volatile uint32_t wert2;
3
volatile uint32_t wert3;
4

5
void ab(void)
6
{
7

8
}
9

10
uint32_t auf(void)
11
{
12

13
}
14

15
void gerade(uint32_t wert3)
16
{
17

18
}

test.h:
1
#ifndef INCLUDED_blabla
2
#define INCLUDED_blabla
3

4
void gerade(uint32_t);
5
void ab(void);
6
uint32_t auf(void);
7

8
#endif

dann kannst du in file.c (wenn test.h eingebunden wird) alle drei Fkt. 
aufrufen
Moderator (Firma: Titel) Persönliche Seite #982980
Lesenswert?

Ich habe mir den Code angesehen, weit + breit keine gerade() gefunden.

Aber ich stimme Johannes M. (johnny-m) voll zu:
> Besorg Dir ein gutes C-Buch und eigne Dir die Grundlagen systematisch an.

Denn schon das:
> void gerade(wert3);
macht ohne Typdefinition für wert3 keinen Sinn.
Und imho weißt du nicht, was eine Typdefinition ist.
Gast #983036
Lesenswert?

war ja nur eine erfundene fkt um das ganze abzukürzen


hab noch ein problem: wenn ich das makefile so ändere wie oben 
vorgeschlagen und die main von runninglight.c mit static deklariere 
führt er mir immer die main von timer.c aus.
Probier ich es umgekehrt bekomme ich eine fehlermeldung undefined 
reference to main

Wie ist es möglich dass die main von runninglight.c ausgeführt wird?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren