Forum: PC-Programmierung C Funktion in Header aufrufen?


von C-Programmierer (Gast)


Lesenswert?

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!

von Michael (Gast)


Lesenswert?

C-Programmierer schrieb:
> Ich scheine etwas grundlegendes zu vergessen, sehe es aber nicht!

Du mußt Modul1.c mitkompilieren und mit dazulinken.

von Dirk B. (dirkb2)


Lesenswert?

Du musst Modul1.c auch bei deinem Compileraufruf mit angeben. Bzw. in 
dein Projekt bzw. make-File aufnehmen.

Das ist auch kein Aufruf sondern eine Deklartion. Und bei Funktionen 
kannst du das extern weglasssen.

von Rene H. (Gast)


Lesenswert?

Extern raus.

Gruss,
René

von Peter II (Gast)


Lesenswert?

C-Programmierer schrieb:
> Ich scheine etwas grundlegendes zu vergessen, sehe es aber nicht!

Objekt Datei dem Linker nicht mit übergeben?

von B. S. (bestucki)


Lesenswert?

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.

von C-Programmierer (Gast)


Lesenswert?

Wenn ich nur die geringste Ahnung hätte wie ich das dem wxDevc++ 
mitteile.

Danke für eure Hilfe.

von Dirk B. (dirkb2)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

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.