GCC Frage

Gast #5868
Lesenswert?

Der Compiler weist dich lediglich daruf hin, dass er in deiner 
Headerdatei einen Funktionsprotoypen gefunden hat aber die eigentliche 
Funktion dazu nirgends ausprogrammiert ist.
Solange du die Funktion nirgendwo aufrufst ist das auch kein Problem.

Gruss
Christian
Gast #5870
Lesenswert?

OK, nochmal

Das da ist ein Funktionsprototyp:
static void waitbusy(void);

Damit gibts du dem Compiler bekannt, dass es irgendwo eine Funktion 
waitbusy gibt, aber die Funktion selber musst du irgendwo anders noch 
ausprogrammieren in der Form

static void waitbusy (void)
{
// Hier kommt der Code der Funktion hin.
}

Übrigens sollte man static Funktionen nicht in der Headerdatei 
deklarieren, da sie für andere Module ja unsichtbar sein sollten.
In deinem Fall würde ich den Prototypen direkt in das C-File einbauen.
Das ganze sieht dann irgendwie so aus.

#include "lcdlib.h"

static waitbusy(void);

// Programmeinstiegspunkt
void main(void)
{

// Hier ist dein Hauptprogramm
for (;;) {   // Endlosschleife
waitbusy();  // Hier wird die Funktion aufgerufen
}
} // ende der Funktion main


// Funktionsbody der Funktion waitbusy
static waitbusy (void)
{
while (noch nicht busy) {
// nur warten
}
} // ende der Funktion waitbusy
Gast #5872
Lesenswert?

Also, ich hab jetzt mal ein kleines Testprogrämmchen gemacht.
Lässt sich einwandfrei und ohne Fehlermeldung übersetzen.

Wenn du magst kannst du mir ja mal deine Quelldatei(en) schicken. 
Irgendwo muss da ja der Hund begraben sein.
Generell lässt sich sagen, dass man Fehlermeldungen nicht ignorieren 
sollte, auch wenn das Programm offensichtlich korrekt erstellt wird.

Gruss
Christian
Gast #5874
Lesenswert?

Du hast den Code etwas zu stark kastriert.
Wo genau wird jetzt deine Funktion waitbusy() aufgerufen? Ist dies 
innerhalb der Funktion delayus() oder aber möchtest du eventuell sogar 
das waitbusy() aus der main Funktion aufrufen, denn das geht nicht, weil 
du die Funktion ja static deklariert hast. Also kann sowohl waitbusy() 
als auch deluyus() nur innerhalb der Datei lcddriver.c aufgerufen 
werden.
Ich vermute, du möchstest die Funktionen in deinem Hauptprogramm 
verwenden. In diesem Fall darfst du dir Funktionen nicht(!) als static 
deklarieren, sondern ganz normal

void waitbusy(void);
void delyaus(unsigned us);

Gruss
Christian
Gast #5875
Lesenswert?

also waitbusy und delayus werden nur innerhalb der lcddriver.c 
aufgerufen und nicht in anderen files like der Main methode...aber wenn 
du das kompiliertst wie es ist, wirst du sehen das der fehler auch 
weiterhin bestehen bleibt da
waitbusy() und delayus() NUR in der lcddriver.c aufgerufen 
werden..:D...und deshalb habe ich die auch als static 
definiert...compiliert das mal und siehst was ich meine..:D

gruss,
kai
Gast #5876
Lesenswert?

Ich denke, ich hab's

Beim Compilieren der Datei lcdtest.c findet der Compiler wegen dem 
Include von lcddriver.h die static-Funktionen. Nun erwartet der Compiler 
aber auch, dass diese Funktionen im aktuellen Scope, also innerhalb 
lcdtest.c programmiert sind, da sie ja als static deklariert wurden. Da 
er diese nicht findet (weil sie in lcddriver.c codiert sind) gibt er die 
Warnungen aus.

Lösung:
Entweder den Include-Befehl in lcdtest.c weglassen oder die 
Funktionsprototypen in lcddriver.c einbauen und in lcddriver.h löschen.

Gruss
Christian

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