URL: https://www.overclockers.at/coding-stuff/void_in_c_183004/page_1 - zur Vollversion wechseln!
Hallo an alle!
Beispiel aus meinem Buch:
#include <stdio.h>
#include <math.h>
double sqrt();
void main()
{
printf("Wurzel aus 2:%lg\n",sqrt2());
}
double sqrt2()
{
return(sqrt(2.0));
}
Compiler wirft eine Fehlermeldung aus:
7 C:\Dev-Cpp\Unbenannt1.cpp `main' must return `int'
C:\Dev-Cpp\Unbenannt1.cpp In function `int main(...)':
8 C:\Dev-Cpp\Unbenannt1.cpp `sqrt2' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
C:\Dev-Cpp\Unbenannt1.cpp In function `double sqrt2()':
11 C:\Dev-Cpp\Unbenannt1.cpp `double sqrt2()' used prior to declaration
Da bei der Funktion double sqrt(); das Klammerpaar leer ist.
Die Erklärung aus dem Buch:
Was also ist die Ursache für die Fahlermeldung? Was Sie noch nicht wissen können, leider akzeptiert der Compiler die Anweisung double sqrt2(); nicht als Funktionsprotoypen, Die Ursache ist das leere Klammerpaar. Der Compiler nimmt an, Sie hätten vergessen, in den Klammern die Funktionsparameter aufzuführen und beschwert sich. Tun Sie dem Compiler den Gefallen und weisen explizit darauf hin, dass es sich bei sqrt2 um eine parameterlose Fuktion handelt.Möglich wird dies durch das Schlüsselwort void, das anstelle eines Parameters in den Klammern aufgeführt werden muss: double sqrt2(void);
Die geänderte Version:
#include <stdio.h>
#include <math.h>
double sqrt(void);
void main()
{
printf("Wurzel aus 2:%lg\n",sqrt2());
}
double sqrt2()
{
return(sqrt(2.0));
}
Fehlermeldungen:
7 C:\Dev-Cpp\Unbenannt1.cpp `main' must return `int'
C:\Dev-Cpp\Unbenannt1.cpp In function `int main(...)':
8 C:\Dev-Cpp\Unbenannt1.cpp `sqrt2' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
C:\Dev-Cpp\Unbenannt1.cpp In function `double sqrt2()':
11 C:\Dev-Cpp\Unbenannt1.cpp `double sqrt2()' used prior to declaration
reicht der erste thread nich?
sorry firefox hat sicher verabschiedet und der thread war noch nicht vertig.
hab nicht gesehen, dass es schon drinnen ist! SORRY!!!
Ich bin zwar kein Programmier-Pro, aber du rufst eine Funktionslose Klasse auf und die soll sqrt(2.0) returnen?
Code:#include <stdio.h> #include <math.h> double sqrt(void); void main() { printf("Wurzel aus 2:%lg\n",sqrt2()); } double sqrt2() { return(sqrt(2.0)); }
@Armax: sqrt ist geändert aber es bleibt immer noch die Fehlermeldung:7 C:\Dev-Cpp\Unbenannt1.cpp `main' must return `int'
mit *arg funtionierts auch nicht.
sqrt(double) ist auch die Funktion von Wurzelziehen schätze ich einmal und nicht seine Klasse.
/Edit: Im zweiten Versuch ist sqrt2 btw 2mal definiert, kA ob das normal ist so zu schreiben. (Beim 2ten mal kann man sich "double" ja sparen schätze ich)
/Edit2: Hab jetzt keinen Compiler bei der Hand um das zu testen und meine Grund-C-Übungen sind schon einige Jährchen her aber ich würde das so machen:
Code:#include <stdio.h> #include <math.h> double sqrt2(double); void main() { printf("Wurzel aus 2:%lg\n",sqrt2(double)); } sqrt2(double) { return(sqrt(2.0)); }

@daisho: deswegen wurde sie auch in sqrt2 umbenannt. wenn ich mich nicht irre.
@daisho:edit: so wie du das schreibst funktioniert es auch nicht!
hab es compiliert.
Qualle wir wärs wenn du lernst compiler fhelermeldungen mal zu verstehn? steht doch eh alles da was falsch is:
Die funktion heisst main() und nicht void main() in CZitat7 C:\Dev-Cpp\Unbenannt1.cpp `main' must return `int'
C:\Dev-Cpp\Unbenannt1.cpp In function `int main(...)':
Was soll die funktion sqrt2 sein? wurzelziehn is sqrt!Zitat8 C:\Dev-Cpp\Unbenannt1.cpp `sqrt2' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
C:\Dev-Cpp\Unbenannt1.cpp In function `double sqrt2()':
11 C:\Dev-Cpp\Unbenannt1.cpp `double sqrt2()' used prior to declaration
Sorry, aber das Problem liegt nicht an der Wurzelfunktion. Steht doch eh schon in der ersten Fehlermeldung, dass main einen int als Rückgabewert haben muss. Is auch logisch so, weil die main Funktion ja die Anzahl der Fehler die aufgetreten sind zurückwerfen sollte. Also, mach einen int aus dem void und schreib ein return 0; unten dran und dann sollts funktionieren.
Das aus dem Buch muss aber nicht zwingend falsch sein deswegen. Es gibt ja viele Compiler und die verwenden leicht unterschiedliche Standards. Dev-CPP verwendet z.B. auch den GNU Compiler und der verlangt eben einen int als Rückgabe von main.
EDIT: Aja, und deine sqrt2 Funktion sollte über der main funktion deklariert werden. Sonst kennt er sie in main ja nicht. 
ah jetzt seh ich den fehler XD du hast sqrt() deklariert du musst schon sqrt2() deklarieren 
edit: damn owned
Hehe, war auch nur aus Erinnerungen von C++ Zeiten konstruiertZitat von Qualle@daisho:edit: so wie du das schreibst funktioniert es auch nicht!
hab es compiliert.

@AdRy: Das Buch sagt, dass es in den seltensten fällen einen rückgabewert der main funktion giebt und daher wird void main verwendet.
EDIT:@ArRy: wenn ich einfach nur main() schreibe funktionierts!!!
komische sache!!!!
gut, wenn du dich schon so sehr an dein buch hältst:
steht vielleicht auch irgendwo im buch für welchen compiler die im buch verwendeten code-beispiele ausgelegt sind? wenn dem so ist solltest einfach den genannten compiler verwenden und dir somit weitere 'probleme' ersparen.
@ 3mind: LCC-Win32 aber da zu compilieren und zu linken gleicht einem wunder für mich!!!
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026