C-Funktionen meistern: Struktur, Deklaration & Best Practices
Eine Funktion ist eine Gruppe von Anweisungen, die zusammen eine Aufgabe ausführen. Jedes C-Programm hat mindestens eine Funktion: main(). Selbst die trivialsten Programme können zusätzliche Funktionen definieren.
Sie können Ihren Code in separate Funktionen aufteilen. Wie Sie den Code auf verschiedene Funktionen verteilen, liegt bei Ihnen, aber logischerweise sollte jede Funktion eine spezifische Aufgabe ausführen.
Die C-Standardbibliothek bietet zahlreiche eingebaute Funktionen, die Ihr Programm aufrufen kann. Zum Beispiel strcat() zum Konkatenieren zweier Strings, memcpy() zum Kopieren von Speicherbereichen und viele mehr.
Eine Funktion kann auch als Methode, Unterprogramm oder Prozedur bezeichnet werden.
Eine Funktion definieren
Die allgemeine Form einer Funktionsdefinition in C:
rueckgabetyp funktionsname(parameter_liste) {
// Funktionskörper
}
Eine Funktionsdefinition besteht aus einem Funktionskopf und einem Funktionskörper. Alle Teile einer Funktion:
Rückgabetyp – Der Datentyp des Werts, den die Funktion zurückgibt. Funktionen ohne Rückgabewert verwenden void.
Funktionsname – Der eigentliche Name der Funktion. Name und Parameterliste bilden die Funktionssignatur.
Parameter – Platzhalter für Werte, die beim Aufruf übergeben werden. Diese heißen formale Parameter. Die Parameterliste bezieht sich auf Typ, Reihenfolge und Anzahl. Parameter sind optional.
Funktionskörper – Enthält Anweisungen, die definieren, was die Funktion tut.
Beispiel: max()-Funktion
/* Funktion gibt das Maximum zweier Zahlen zurück */
int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
Funktionsdeklarationen
Eine Funktionsdeklaration teilt dem Compiler den Funktionsnamen und die Aufrufweise mit. Der eigentliche Körper kann separat definiert werden.
rueckgabetyp funktionsname(parameter_liste);
Für die obige max()-Funktion:
int max(int num1, int num2);
Parameternamen sind in der Deklaration nicht wichtig, nur ihre Typen. Folgendes ist ebenfalls gültig:
int max(int, int);
Eine Funktionsdeklaration ist erforderlich, wenn Sie eine Funktion in einer Quelldatei definieren und sie in einer anderen Datei aufrufen. In diesem Fall sollten Sie die Funktion am Anfang der aufrufenden Datei deklarieren.
Eine Funktion aufrufen
Beim Erstellen einer C-Funktion definieren Sie, was die Funktion tun soll. Um eine Funktion zu nutzen, müssen Sie sie aufrufen.
Wenn ein Programm eine Funktion aufruft, wird die Programmsteuerung an die aufgerufene Funktion übergeben. Diese führt die definierte Aufgabe aus und gibt die Steuerung zurück, wenn ihr return ausgeführt wird oder die schließende Klammer erreicht wird.
Um eine Funktion aufzurufen, übergeben Sie die erforderlichen Parameter zusammen mit dem Funktionsnamen. Wenn die Funktion einen Wert zurückgibt, können Sie diesen speichern.
Beispiel
#include <stdio.h>
/* Funktionsdeklaration */
int max(int num1, int num2);
int main() {
int a = 100;
int b = 200;
int ret;
/* Funktionsaufruf */
ret = max(a, b);
printf("Maximaler Wert ist: %d\n", ret);
return 0;
}
/* Funktionsdefinition */
int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
Ausgabe:
Maximaler Wert ist: 200
Funktionsargumente
Wenn eine Funktion Argumente verwenden soll, muss sie Variablen deklarieren, die die Werte der Argumente akzeptieren. Diese heißen formale Parameter.
Formale Parameter verhalten sich wie andere lokale Variablen innerhalb der Funktion und werden beim Eintritt in die Funktion erstellt und beim Verlassen zerstört.
Es gibt zwei Arten, Argumente an eine Funktion zu übergeben:
| Nr. | Aufruftyp & Beschreibung |
|---|---|
| 1 | Call by Value (Wertübergabe) – Kopiert den tatsächlichen Wert in den formalen Parameter. Änderungen am Parameter wirken sich nicht auf das Argument aus. |
| 2 | Call by Reference (Referenzübergabe) – Kopiert die Adresse des Arguments in den formalen Parameter. Über die Adresse wird auf das eigentliche Argument zugegriffen. Änderungen am Parameter beeinflussen das Argument. |
Standardmäßig verwendet C Call by Value. Im Allgemeinen bedeutet dies, dass Code innerhalb einer Funktion die Argumente, mit denen sie aufgerufen wurde, nicht verändern kann.
Beispiel: Call by Value vs. Call by Reference
#include <stdio.h>
void swapByValue(int a, int b) {
int temp = a;
a = b;
b = temp;
}
void swapByReference(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 10, y = 20;
swapByValue(x, y);
printf("Nach swapByValue: x=%d, y=%d\n", x, y); // x=10, y=20 (unverändert)
swapByReference(&x, &y);
printf("Nach swapByReference: x=%d, y=%d\n", x, y); // x=20, y=10 (vertauscht)
return 0;
}
C Sprache
- Vier bewährte Muster für benutzerdefinierte Funktionen in C
- Arrays an Funktionen in C übergeben: 1D & 2D – Praxisleitfaden
- C-Standardbibliothek-Funktionen meistern: Praxisleitfaden
- Python Lambda-Funktionen meistern: Praxisbeispiele & Best Practices
- Verilog Functions meistern für effizientes RTL-Design
- Effiziente Speichernutzung mit C-Bitfeldern
- Datei-I/O in C meistern: Erstellen, Öffnen & Verwalten von Dateien
- Variable Argumente in C meistern: Ein praktischer Leitfaden
- Polymorphie in C++: Praktischer Leitfaden
- MATLAB-Funktionen: Definition, Workspace, Ein- & Ausgaben