header file erzeugung

Gast #982743
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
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
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
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
Gast #982842
Hab es jetzt genau so probiert wie im Beitrag von Jan. Bekomme aber noch 
immer die Fehlermeldung 'undefined reference' to gerade

Hat jemand eine Idee?
#982859
Rufus t. Firefly wrote:
> In "file.c" fehlt
>
> #include "test.h"

Dann gäbe es keinen "undefined reference" Fehler, sondern nur eine 
"implicit declaration" Warnung.

@Rene:

test.o nicht dazugelinkt, oder Tippfehler beim Namen in test.c.
Gast #982890
danke, sehr hilfreicher tipp.

noch eine kurze frage:
in timer.c bekomm ich die fehlermeldung multiple definition of 'main'

hast du diesen error schon mal gehabt?
Moderator (Firma: Titel) Persönliche Seite #982980
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
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

Eine eigene Frage? Dieser Thread ist über 18 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.