C Funktion in Header aufrufen?

Gast #3718180
Hallo,

Ich möchte in einem C-Programm eine ausgealgerte Funktion im Header 
aufrufen.
1
-----Main.c-------
2
#include <stdio.h>
3
#include "Modul1.h"
4

5
int main(int argc, char *argv[])
6
{
7

8
    int b;
9
    b = getAnzahl(void);
10
    
11
    printf("Anzahl %u\n",b);
12
    printf("Press enter to continue ...");
13
    getchar();  
14
    return 0;
15
}
16

17
-----Modul1.h----------
18
#ifndef __Modul1_H
19
#define __Modul1_H
20

21
extern int getAnzahl(void);
22

23
#endif 
24

25
-----Modul1.c--------
26
#include "Modul1.h"
27

28
int getAnzahl()
29
{
30
    static int a=0;
31
    a++;
32
    return a;    
33
}
Möchte also die Anzahl der Funktionsaufrufe zurückgeben lassen.

Der Compiler meldet:
[Linker Error] undefined reference to `getAnzahl'

Ich scheine etwas grundlegendes zu vergessen, sehe es aber nicht!
C-Programmierer schrieb:
> #ifndef __Modul1_H
> #define __Modul1_H
Lass die führenden Unterstriche weg. Solche Ausdrücke sind für den 
Compiler reserviert.

C-Programmierer schrieb:
> extern int getAnzahl(void);
Lass das extern weg. Dies wird nur bei Variablen benötigt.

C-Programmierer schrieb:
> b = getAnzahl(void);
Hier das void weglassen.

C-Programmierer schrieb:
> int getAnzahl()
Hier noch ein void in die Klammern.

C-Programmierer schrieb:
> static int a=0;
Mach aus dem int ein unsigned int oder sorge dafür, dass a nicht 
überlaufen kann. Ein Über- oder Unterlauf einer vorzeichenbehafteten 
Variable erzeugt undefiniertes Verhalten.
Ich kenne wxDevc++ nicht, aber nach dem Screenschoot von der Webseite 
sollte es nicht soviel anders gehen wie bei den meisten IDE.

Auch die IDE hat ein Projekt-Mennu. Da gibt es dann sowas wie Add 
Source.

Oder du kannst über das View-Menue ein Fenster mit Baum-Ansicht sichtbar 
machen, in der das Main.c steht. Rechte Maustaste und Add-Source.
Moderator Persönliche Seite
be stucki schrieb:
>> extern int getAnzahl(void);
> Lass das extern weg. Dies wird nur bei Variablen benötigt.

Es stört allerdings bei Funktionsdeklarationen nicht, es bringt eben
nur nichts weiter.  Dass es sich um eine Deklaration (und nicht eine
Definition) handelt, erkennt der Compiler bei Funktionen bereits
eindeutig daran, dass nach dem Kopf ein Semikolon statt einer öffnenden
geschweiften Klammer folgt.

Antwort schreiben

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