Menu
Coddy logo textTech

Quelldateien

Teil des Abschnitts Object Oriented Programming der C-Journey von Coddy — Lektion 3 von 61.

Bisher haben wir Funktionsdeklarationen in Header-Dateien platziert, aber der eigentliche Funktionscode (die Definition) befand sich in der Hauptdatei. Der nächste Schritt in der modularen Programmierung besteht darin, diese Definitionen in eigene Quelldateien (.c-Dateien) zu verschieben.

Dies erzeugt eine saubere dreiteilige Struktur: Der Header deklariert Funktionen, eine separate Quelldatei definiert diese und main verwendet sie einfach. So sieht es aus:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif
// math_utils.c
#include "math_utils.h"

int add(int a, int b) {
    return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"

int main() {
    printf("%d\n", add(5, 3));
    return 0;
}

Beachten Sie, dass math_utils.c seinen eigenen Header einbindet. Dies stellt sicher, dass die Funktionsdefinition mit der Deklaration übereinstimmt – wenn sie nicht übereinstimmen, wird der Compiler den Fehler erkennen. Die Hauptdatei muss lediglich den Header einbinden, um die Funktion zu verwenden; sie muss nicht wissen, wie add intern funktioniert.

Diese Trennung hält Implementierungsdetails verborgen und ermöglicht es Ihnen, die Funktionslogik zu ändern, ohne Dateien zu berühren, die diese Funktionen verwenden.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein einfaches Mathematik-Utility erstellen, indem wir Ihren Code in die richtige Drei-Dateien-Struktur organisieren: einen Header für Deklarationen, eine Quelldatei für Implementierungen und eine Hauptdatei, die diese verwendet.

Sie werden drei Dateien erstellen:

  • math_ops.h: Ihre Header-Datei, die Funktionsdeklarationen für zwei Operationen enthält: multiply und subtract. Beide Funktionen nehmen zwei Ganzzahlen entgegen und geben eine Ganzzahl zurück. Vergessen Sie nicht, Guards mit dem Symbol MATH_OPS_H einzufügen.
  • math_ops.c: Ihre Quelldatei, welche die tatsächlichen Implementierungen von multiply und subtract enthält. Diese Datei sollte ihren eigenen Header inkludieren, um sicherzustellen, dass Deklarationen und Definitionen übereinstimmen.
  • main.c: Ihre Hauptdatei, die den Header inkludiert und beide Funktionen verwendet, um Berechnungen durchzuführen.

Die Funktion multiply sollte das Produkt zweier Ganzzahlen zurückgeben, und subtract sollte die erste Ganzzahl minus der zweiten zurückgeben.

Sie erhalten zwei Ganzzahl-Eingaben: a und b.

Geben Sie in Ihrer Hauptfunktion die Ergebnisse beider Operationen in separaten Zeilen aus:

Product: {result of multiply}
Difference: {result of subtract}

Zum Beispiel wäre bei den Eingaben 8 und 3 die Ausgabe:

Product: 24
Difference: 5

Spickzettel

Funktionsdefinitionen können aus der Hauptdatei in separate Quelldateien (.c-Dateien) verschoben werden, wodurch eine dreiteilige modulare Struktur entsteht:

  • Header-Datei (.h): Enthält Funktionsdeklarationen
  • Quelldatei (.c): Enthält Funktionsdefinitionen
  • Hauptdatei (main.c): Verwendet die Funktionen

Beispielstruktur:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif
// math_utils.c
#include "math_utils.h"

int add(int a, int b) {
    return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"

int main() {
    printf("%d\n", add(5, 3));
    return 0;
}

Die Quelldatei (.c) sollte ihren eigenen Header einbinden, um sicherzustellen, dass die Funktionsdefinition mit der Deklaration übereinstimmt. Die Hauptdatei muss nur den Header einbinden, um die Funktionen zu verwenden, wodurch die Implementierungsdetails verborgen bleiben.

Probier es selbst

#include <stdio.h>
#include "math_ops.h"

int main() {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    
    // TODO: Rufe die Funktion multiply mit a und b auf und speichere das Ergebnis
    
    // TODO: Rufe die Funktion subtract mit a und b auf und speichere das Ergebnis
    
    // TODO: Gib die Ergebnisse in folgendem Format aus:
    // Product: {result of multiply}
    // Difference: {result of subtract}
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Object Oriented Programming