conflicting types for 'wurzel'|

Gast #3459967
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.