conflicting types for 'wurzel'|

Gast #3459967
Lesenswert?

Bitte ich brauche hilfe. Das ist meine Programme:
#include <stdlib.h>
#include<math.h>
double main()
{
double x1,x2,x3;
x1=4.52;
x2=10.5677;
x3=150.578;

double Mx1=wurzel( x1);
printf("x1:%f\n",Mx1);
double Mx2= wurzel( x2);
printf("x2:%f\n",Mx2);
double Mx3= wurzel( x3);
printf("x3:%f\n",Mx3);
return 0;
}


 double wurzel(double x)
{
    double m;
    double f=0.1;
    double wurz=sqrt(x);
for (m=x/2;m*m<x;)
    {
        m=m+f;
        printf("%f=%f\n",m,wurz);

    }

    for (m=x/2;m*m>x;)
    {
        m=m-f;

        printf("%f=%f\n",m,wurz);
    }


   return m;
}


Zeigt mir immer fehler:
conflicting types for 'wurzel'

was ist bedeutet? Wie kann ich wieder gut machen?
Eingentlich wollte ich aus funktion "wurzel" in hauptprogramm werte  von 
m in double zurückgeben.
Gast #3459988
Lesenswert?

serf5 schrieb:
> #include<math.h>
Leerzeichen fehlt

serf5 schrieb:
> double main()
int main()

serf5 schrieb:
> for (m=x/2;m*m<x;)
nicht schoen

serf5 schrieb:
> printf("%f=%f\n",m,wurz);
falsche parameter, das muesste glaube ich %lf heissen und nicht %f

Dein Problem duerfte aber sein, das du deine Funktion wurzel nicht 
deklariert hast.
Entweder du verschiebst die Funktion vor main oder aber du laesst die 
Funktion wo sie ist und du deklarierst sie mal aben schnell vor main.

http://stackoverflow.com/questions/1549631/getting-conflicting-types-for-function-in-c-why
Gast #3460106
Lesenswert?

serf5 schrieb:
> Zeigt mir immer fehler:
> conflicting types for 'wurzel'

Also bei mir sagt der Compiler:
1
serf5.c:3:8: Warnung: Rückgabetyp von »main« ist nicht »int« [-Wmain]
2
serf5.c: In Funktion »main«:
3
serf5.c:10:1: Warnung: Implizite Deklaration der Funktion »wurzel« [-Wimplicit-function-declaration]
4
serf5.c:11:1: Warnung: Implizite Deklaration der Funktion »printf« [-Wimplicit-function-declaration]
5
serf5.c:11:1: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »printf« [standardmäßig aktiviert]
6
serf5.c: Auf höchster Ebene:
7
serf5.c:20:9: Fehler: In Konflikt stehende Typen für »wurzel«
8
serf5.c:10:12: Anmerkung: Vorherige implizite Deklaration von »wurzel« war hier
9
serf5.c: In Funktion »wurzel«:
10
serf5.c:28:9: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »printf« [standardmäßig aktiviert]
11
serf5.c:36:9: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »printf« [standardmäßig aktiviert]

serf5 schrieb:
> Vielen dank für den Rat!! Jetzt funktionirt es! Aber warum?

Weil der Compiler nun beim Aufruf auch weiß, daß die Funktion ein double 
zurückgibt.
Wenn man ihm das nicht sagt, nimmt er als default int an. Wenn er dann 
später zu der Implementation deiner Funktion kommt, steht da aber auf 
einmal double, was seiner vorherigen Annahme widerspricht. Also gibt's 
da einen Fehler.
#3460303
Lesenswert?

Kaj schrieb:
> serf5 schrieb:
>> printf("%f=%f\n",m,wurz);
> falsche parameter, das muesste glaube ich %lf heissen und nicht %f

Das ist falsch!

Lies nochmal die Referenz/man page für printf durch.

Bei Funktionen mit variablen Argument werden Ganzzahltypen (char, short) 
in int gewandelt und float als double übergeben. (Macht der Compiler, 
steht im Standard)
Somit kennt printf kein float und daher ist %f für double (und damit 
auch float) da.

Dies glit für printf. scanf ist eine ganz andere Funktion (die erwartet 
ja auch Zeiger als Paramter)

Die Compiler aktzeptieren das %lf und seit C11 ist es auch im Standard 
enthalt und somit nicht mehr falsch. Aber nötig ist es nicht.

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