001
23.04.2007, 16:14 Uhr
0xdeadbeef
Gott (Operator)
|
Au weia, das ist ja uralter Stil, noch vor der Standardisierung. Ein C99-Compiler kauft dir das so nicht mehr ab...
Ich übersetz das mal in ANSI-C:
C++: |
#include <stdio.h> /* Für scanf und printf */
float prod(float, float);
int main(void){ float a,b;
printf("Eingabe a: "); scanf("%f", &a); printf("Eingabe b: "); scanf("%f", &b); printf("Produkt ist %f\n", prod(a, b));
return 0; }
float prod(float x, float y) { return x * y; }
|
Das ist grob äquivalent. Der Code, den du da hast, benutzt ne ganze Reihe Schweinereien, wie die lokale, unvollständige Deklaration von prod, und die ganz alte K&R-Schreibweise, die heute niemand mehr reinen Gewissens benutzen will.
Speziell ist
C++: |
float prod(float x, float y) { return x * y; }
|
die moderne Schreibweise für
C++: |
float prod(x, y) float x, y { return x, y; }
|
Der Hintergrund dafür ist, dass die ersten C-Compiler, lange bevor die Sprache standardisiert wurde, für so ziemlich alles int als Default-Wert angenommen haben. So ist zum Beispiel
(was übrigens kein gültiges C99 mehr ist) in C90 als legacy erlaubt und äquivalent zu
C++: |
int main() { /* ... */ }
|
Stünde da
C++: |
prod(x, y) { return x * y; }
|
wäre das äquivalent zu
C++: |
int prod(int x, int y) { return x * y; }
|
...aber wie gesagt, diese alte Schreibweise benutzt heute (aus gutem Grund) niemand mehr.
C++: |
float prod(); /* Sinnerhaltend gekürzt */
|
deklariert lokal eine Funktion mit Rückgabewert float und nicht näher spezifizierter Parameterliste. Es lässt sich so ohne weiteres schreiben
C++: |
float prod();
prod(1); prod(2, 3); prod(NULL, 3.14159, "foobar");
|
...allerdings kommt dabei dann natürlich ziemlicher Unfug raus. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 23.04.2007 um 16:20 Uhr von 0xdeadbeef editiert. |