Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Funktionen problem mit parameter und rückgabewerten !

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.04.2007, 15:52 Uhr
Jürgen



hallo erstmal

also ich lerne in der schule programmieren, was bei mir eigentlich bis jetzt immer ganz gut gealufen ist nur jetz check ich absolut nichts mehr ...
es geht jetzt um funktionen mit rückgabe werten und parametern ich versteh es nicht wirklich und hoffe ihr könnt es mir jetzt mal für total doofe erklären ...

ich hab schon die osterferien damit verbracht das irgendwie in schädel zu bekommen, leider mit wenig erfolg =(

(C programmierung)



Code:
main(){
float a,b,

prod();
printf("Eingabe a");
scanf("%f",&a);
printf("\nEingabe b);
scanf("%f",&b);
printf("Produkt ist %f\n",prod(a,b));
}
float prod(x,y)
float x,y;
{
return x*y;
}



es wär nett wenn mir mal einer das vernünftig erklären könnte

aber am wichtigsten sind die stellen:


Code:

float prod(x,y)
float x,y;
{
return x*y;
}





Ich danke euch jetzt schonmal .
irdendwann könntet ihr mir das auch mal mit zeigern erklären ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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

C++:
main() {
  /* ... */
}


(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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.04.2007, 17:39 Uhr
Jürgen



Hey,

Ich wollt mich bedanken, habs jetzt endlich verstanden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.04.2007, 18:02 Uhr
0xdeadbeef
Gott
(Operator)


Schön, schön. BTW - Pedantikermodus an -

C++:
int main();


ist streng genommen nicht standardkonform. Der Standard spezifiert explizit

C++:
int main(void);
int main(int argc, char *argv[]);


als gültige Signaturen für main.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: