C Funktionen


C Funktionen

Das Erfolgsrezept der Software-Industrie liegt traditionell darin, alten Code aus dem Internet zu klauen, die Hintergrundfarbe aller Buttons und Fenster zu ändern und den doppelten Preis des alten Produkts zu verlangen. Damit wir auch was von dem fetten Kuchen dieser florierenden Wirtschaft abbekommen geht es in diesem Part um das Feature, das mehr Zeit, Geld und Sex für alle verspricht: Funktionen.

Wenn bestimmt Abläufe in einem Programm öfter gebraucht werden, wie z.B. das Anzeigen von Text auf der Konsole, werden Funktionen wie printf(" ... ") geschrieben, um nicht an jeder fünften Zeile den Selben Code zu schreiben.

Eine Funktion sieht so aus:

/*
 * Berechnet die potenz base ^ exp
 */
double pow(double base, int exp)
{
       double result = 1;
       if(exp >= 0)
       {     
             // exp >= 0 => berechne base * .... * base
             for(int i = 0; i < exp; i++)
                    result *= base;
       }
       else
       {
             // exp < 0 => berechne base : .... : base
             for(int i = 0; i < -exp; i++)
                    result /= base;
       }

       return result;
}

Allgemein haben Funktionen folgendes Schema:


Rückgabetyp Name(Datentyp Argument 1, Datentyp Argument 2,...)

{

       // ...

       return Ergebnis vom Datentyp, des Rückgabetyps;
}

 
Die obige Funktion führt Potenzberechnungen durch. Der Input der Funktion sind Basis und Exponent: double base, int exp und als Ergebnis wird eine Variable vom Rückgabetyp  double zurückgegeben.
Die Funktion kann nun wie folgt eingesetzt werden: double nine = pow(3.0, 3); // 3^3.
#include <stdio.h>
/*
 * Berechnet die potenz base ^ exp
 */
double pow(double base, int exp)
{
       double result = 1;
       if(exp >= 0)
       {     
             // exp >= 0 => base * .... * base
             for(int i = 0; i < exp; i++)
                    result *= base;
       }
       else
       {
             // exp >= 0 => berechnet base : .... : base
             for(int i = 0; i < -exp; i++)
                    result /= base;
       }
       return result;
}
int main(void)
{
       for(int exp = -3; exp <= 3; exp += 3)         // iteriere über die exponenten -3, 0, 3
       for(double base = -3; base <= 3; base += 2)   // und basen -3, -1, 1, 3
       {
             double result = pow(base, exp);         // rufe pow auf
             printf("%f^%d = %f \n\n", base, exp, result);
       }     
       getchar();
       return 0;
}





Das Schlüsselwort return bricht die Funktion ab und gibt das Ergebnis zurück:

int signum(int value)
{
       if(value == 0)
             return 0;    // brich ab und gibt 0 zurück

       if(value < 0)
             return -1;   // brich  ab und gibt -1 zurück

       return 1;           // nur fall value > 0 übrig!
     
       // dieser code wird nie ausgeführt:
       printf("signum wurde aufgerufen");
}

       signum(0);  // == 0

       signum(-5); // == -1

       signum(5);  // == 5

 Sollen bei einer Funktion keine Daten zurückgegeben werden oder keine Argumente verwendet werden, kann der leere Datentyp void genutzt werden:

void draw_smiley(void)
{
       printf(":-)");
}

Alternativ

void draw_smiley()
{
       printf(":-)");
}

Eine Funktion mit Rückgabetyp void braucht kein return, kann aber wie folgt abgebrochen werden:

void void_func(int value)
{
       if(value == 0)
             return;

       // an dieser stelle ist value != 0
       printf("Der von Null verschiedene Wert ist %d", value);
}

Keine Kommentare:

Kommentar veröffentlichen

Inhalt