float und GNU GCC (CodeBlocks)

Gast #1831051
Hi,

ich verwende CodeBlocks unter Windows und hab' da irgendwie mit dem 
Datentyp float Probleme.

Mein kleines Testprogramm sieht so aus:
1
#include <stdio.h>
2
#include <stdlib.h>
3

4
int main()
5
{
6

7
    add_double(12.5, 13.3);
8
    add_float(12.5, 13.3);
9
    return 0;
10
}
11

12

13
void add_double(double zahl1, double zahl2){
14
    printf("Summe double = %f", (zahl1+zahl2)); //hier wird 25.8 ausgegeben - passt also 
15
    //return (zahl1 + zahl2);
16
}
17

18
void add_float(float zahl1, float zahl2){
19
     printf("Summe float = %f", (zahl1+zahl2)); //hier wird 2.640625 ausgegeben - passt nicht! 
20
}

Weiß jemand warum das so ist? Als Compiler ist übrigens der GNU GCC in 
CodeBlocks eingetragen.
#1831073
Was passiert ist folgendes:

Die beiden Funktionen sind nicht deklariert.

Erst nimmt der Compiler beim Aufruf an, daß jeweils
double übergeben wird (bei add_double weil du es so hinschreibst,
und bei add_float, weil du zwar float hinschreibst, die aber
beim Aufruf von Funktionen defaultmäßig als double übergeben
werden).

Also werden double übergeben, auch bei add_float.

Die Funktion selbst erwartet aber nur float.
Wenn der Compiler das merkt, ist es aber zu spät - der
Aufruf ist schon kompiliert.

=> Deklarieren hilft, und die Warnungen des Compilers
sind immer eine Überlegung wert.
Gast #1831074
Klaus Wachtler schrieb:
> 1. Funktionen deklarieren vor der Verwendung

Danke, hat geklappt.

Hatte bisher keinerlei Erfahrung mit dem GCC, der Compiler den ich 
vorher hatte hat über die fehlende Deklaration hinweggesehen. Darum 
hätte ich den Fehler niemals dort vermutet.
#1831076
Hier noch die Warnungen, die du ignoriert hast:
1
klaus@i4a:~ > gcc -Wall t.c
2
t.c: In function ‘main’:
3
t.c:7: warning: implicit declaration of function ‘add_double’
4
t.c:8: warning: implicit declaration of function ‘add_float’
5
t.c: At top level:
6
t.c:13: warning: conflicting types for ‘add_double’
7
t.c:7: warning: previous implicit declaration of ‘add_double’ was here
8
t.c:18: warning: conflicting types for ‘add_float’
9
t.c:8: warning: previous implicit declaration of ‘add_float’ was here
#1831077
Hm, bei mir sind es nicht nur warnings sondern gar errors:
1
gcc -O0 -g3 -Wall -c -fmessage-length=0 -omain.o ..\main.c
2
..\main.c: In function `main':
3
..\main.c:7: warning: implicit declaration of function `add_double'
4
..\main.c:8: warning: implicit declaration of function `add_float'
5
..\main.c: At top level:
6
..\main.c:12: error: conflicting types for 'add_double'
7
..\main.c:7: error: previous implicit declaration of 'add_double' was here
8
..\main.c:17: error: conflicting types for 'add_float'
9
..\main.c:8: error: previous implicit declaration of 'add_float' was here
10
Build error occurred, build is stopped
Gast #1831078
Klaus Wachtler schrieb:
> Erst nimmt der Compiler beim Aufruf an, daß jeweils
> double übergeben wird (bei add_double weil du es so hinschreibst,
> und bei add_float, weil du zwar float hinschreibst, die aber
> beim Aufruf von Funktionen defaultmäßig als double übergeben
> werden).

Achso, jetzt ist mir das klar.
Danke für die Erklärung.

Klaus Wachtler schrieb:
> => Deklarieren hilft, und die Warnungen des Compilers
> sind immer eine Überlegung wert.

Danke, die werd ich gleich mal einschalten.
#1831081
Ach Mann, immer diese idiotische 
15-Minuten-oder-anderer-Post-schon-da-Regel. Ich wollte noch sagen, dass 
ich Eclipse verwende und es vielleicht an den Einstellungen liegt, dass 
bei mir etwas ein "error" ist und beim Threadersteller eine "warning".

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.