bcc32 5.6.4 - function declaration warning - newbie
-
Ein Hallo an alle,
bin neu in der C / C++ Programmierung und auch neu hier im Forum.
Sollte ich das Falsche Board für meine Frage ausgewählt haben, so bitte ich um Entschuldigung....Also hier nun meine Frage:
Ich habe hier den bcc32 in der Version 5.6.4 und kompiliere folgenden Quellcode:
-------------------------- Quellcode on ------------------------
#include <stdlib.h>int pass();
int main()
{
pass();
return 0;
}int pass()
{
return 0;
}
-------------------------- Quellcode off ------------------------Bei der Kompilierung erhalte ich folgende Warnung:
--------------------------- Warnung an ---------------------------
Warnung W8065 wort02.C 8: Aufruf der Funktion 'pass' ohne Prototyp in Funktion main
--------------------------- Warnung aus ---------------------------
Meine Frage ist nun WARUM?!?
Ich vermute einen Bug im bcc32.....Wer kann mir näheres dazu schreiben?
Viele Grüße
Eljot
-
int pass();
In C++ ist das eine Funktion mit Rückgabetyp int und keinem Parameter. In C ist das nicht so. Dort bedeutet das, dass die Parameter unbestimmt sind. Wenn du in C also eine Funktion mit keinem Parameter brauchst, dann solltest du void verwenden.
int pass(void); int main(void) { pass(); return 0; } int pass(void) { return 0; }
btw: Du brauchst solche Sachen wie "Quellcode on/off" nicht zu schreiben. Dafür gibts die C/C++ Tags. Schau mal unter den Edit Bereich.
-
Hi Groovemaster,
vielen Dank für Deine Antwort!
Wenn ich die Funktion als void deklariere ändert sich an meinem Problem leider nichts.... Aber was heißt Problem, es ist ein Schönheitsfehler....
Mich interessiert es aber, warum der bcc32 hier eine Warnung schreibt...?!?
Hast Du eine Idee?Viele Grüße
Eljot
-
Eljot schrieb:
Wenn ich die Funktion als void deklariere ändert sich an meinem Problem leider nichts
Dann hast du bestimmt irgendwas falsch gemacht. Habs gerade nochmal durch den Compiler gejagt (obwohl ich lediglich Version 5.5.1 hier hab) und bekomme weder Fehler noch Warnungen. Hast du den von mir geposteten Code auch 1 zu 1 übernommen?
-
Hi Groovemaster,
ok.... es geht jetzt auch bei mir.....
Werde mir Deine Tipps zu Herzen nehmen und bedanke mich nochmals recht tolle für Deine Hilfe....
-
Huhu
Ich hab das selbe Problem in meinem C-Code.
Allerdings nicht mit Funktionen die ich geschrieben habe, sondern in welchen die per ANSI-C Standard mit drinne sind.
beispiel malloc, oder auch aus funktionen der string.h wzB strtok().
Fehlermeldungen sehen immer ungefähr so aus.
"CVS.c": W8065 Call to function 'malloc' with no prototype in function neueCVLok at line 159
159 T_CVLok *cv = (T_CVLok*) malloc(sizeof(T_CVLok));
In irgend einer headerdatei #define T_CVLok struct CVLokDie Entwicklungsumgebung ist C++BuilderX, welcher Compiler drunter sitzt weiß ich leider net.
Und nein ich will die Warnungen nicht ausstellen :).
Danke für eure Hilfe.
*moep*
-
Hast du auch die richtigen Header eingebunden? (malloc() ist in der <stdlib.h>, strtok() in der <string.h> deklariert)
(kleiner Tip: Statt des #define solltest du lieber ein typedef verwenden ;))
-
Mit dem C++BuilderX hab ich zwar keine Erfahrung. Aber bevor du eine Standardfunktion nutzen kannst, musst du die Headerdatei inkludieren, in der die Funktion deklariert ist. Für malloc wäre dies zB <stdlib.h>. Hast du dies gemacht? Manchmal wundern sich Leute auch, warum eine Funktion vom Compiler als unbekannt ausgewiesen wird, obwohl die entsprechende Headerdatei doch inkludiert wurde. Fakt ist aber, wenn man die include-Hierarchie durchgeht, die Headerdatei erst nach der Benutzung der Funktion eingebunden wird. Solche Fallstricke solltest du auf jeden Fall prüfen.
-
Huhu,
also die include Dateien sind alle drinne und stehen am Anfang der c Datei.
Also daran kanns nicht liegen.
Er kann sie ja auch compilieren und ausführen aber bei mitlerweile 5k Zeilen bombt der mich mit Warnungen nur noch zu. Und ich bekomm die wichtigen neuen Warnungen nicht mehr :).
Mfg Nefer
-
den quellcode in mehrere dateien aufteilen?
da sollten dann die warnungen übersichtlicher werden.oder schauen ob der compiler/ide ein schalter hat damit mehr
warnungen angesehen werden können.mfg f.-th.
-
Nefer schrieb:
also die include Dateien sind alle drinne und stehen am Anfang der c Datei.
Erstelle mal bitte ein minimales Beispiel, das dein Problem illustriert, und poste es hier.
-
Ein hallo an alle, die geantwortet haben.
Erst mal vielen Dank für die ganzen Antworten!
War schon lange nicht mehr hier und bin jetzt ganz überrascht, dass die Sache immer noch aktuell ist. Also bei mir funzt die Sache jetzt, Grund für den Fehler war, dass man unter Borland (anderen Compiler "kenne" ich nicht) bei der Funktionsdekeration IMMER auch ein "Wert" in die Klammer gestzt werden muss!
Habe vor ein "paar" Tagen auch "das warum das so ist" gelesen, kann mich aber im Moment nicht im Deteil daran erinnern.
Eine Deklaration wie z.B.:
void funktion_blabla();
Erzeugt eine Compilermeldung.
Die Deklaration muss z.B. so stattfinden:
void funktion_blabla(void);
Wenn man das mal geschnallt hat und auch macht, klappt es auch mit dem
Compiler.Viele Grüße an alle
Eljot