Pliki źródłowe
Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 3 z 61.
Do tej pory umieszczaliśmy deklaracje funkcji w plikach nagłówkowych, ale właściwy kod funkcji (definicja) znajdował się w pliku głównym. Kolejnym krokiem w programowaniu modułowym jest przeniesienie tych definicji do osobnych plików źródłowych (plików .c).
Tworzy to przejrzystą, trzyczęściową strukturę: plik nagłówkowy deklaruje funkcje, osobny plik źródłowy je definiuje, a funkcja main po prostu z nich korzysta. Wygląda to tak:
// 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;
}
Zwróć uwagę, że math_utils.c dołącza własny plik nagłówkowy. Dzięki temu definicja funkcji jest zgodna z deklaracją; jeśli nie będą zgodne, kompilator wykryje błąd. Główny plik musi jedynie dołączyć plik nagłówkowy, aby użyć funkcji; nie musi wiedzieć, jak wewnętrznie działa add.
Ten podział ukrywa szczegóły implementacji i pozwala modyfikować logikę funkcji bez ingerowania w pliki, które korzystają z tych funkcji.
Wyzwanie
ŁatwyZbudujmy prostą bibliotekę matematyczną, porządkując kod w odpowiedniej strukturze trzech plików: pliku nagłówkowego z deklaracjami, pliku źródłowego z definicjami oraz pliku głównego, który z nich korzysta.
Utworzysz trzy pliki:
math_ops.h: Plik nagłówkowy zawierający deklaracje dwóch funkcji:multiplyisubtract. Obie funkcje przyjmują dwie liczby całkowite i zwracają liczbę całkowitą. Pamiętaj o dodaniu strażników nagłówka z użyciem symboluMATH_OPS_H.math_ops.c: Plik źródłowy zawierający definicje funkcjimultiplyisubtract. Ten plik powinien dołączać własny plik nagłówkowy, aby deklaracje zgadzały się z definicjami.main.c: Plik główny, który dołącza plik nagłówkowy i używa obu funkcji do wykonywania obliczeń.
Funkcja multiply powinna zwracać iloczyn dwóch liczb całkowitych, a subtract powinna zwracać różnicę pierwszej liczby całkowitej i drugiej.
Otrzymasz dwie liczby całkowite: a i b.
W funkcji głównej wypisz wyniki obu operacji w osobnych wierszach:
Product: {result of multiply}
Difference: {result of subtract}Na przykład dla danych wejściowych 8 i 3 wynik będzie następujący:
Product: 24
Difference: 5Spróbuj swoich sił
#include <stdio.h>
#include "math_ops.h"
int main() {
int a, b;
scanf("%d", &a);
scanf("%d", &b);
// TODO: Wywołaj funkcję multiply z a i b, zapisz wynik
// TODO: Wywołaj funkcję subtract z a i b, zapisz wynik
// TODO: Wypisz wyniki w formacie:
// Iloczyn: {wynik funkcji multiply}
// Różnica: {wynik funkcji subtract}
return 0;
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania modularnego
Pliki nagłówkoweZabezpieczenia przed wielokrotnym dołączeniemPliki źródłoweFunkcje statycznePodsumowanie: kalkulator modularny4Enkapsulacja
Koncepcja niejawnych wskaźnikówDefiniowanie niejawnych strukturGettery i setteryWalidacja w setterachPowtórka: tajemnicze pudełko2Obiekty i metody
Struktury jako obiektyWskaźnik „self”Poprawność constWskaźnik czy wartośćMetody pomocniczePodsumowanie: menedżer punktów5Projekt: Proste konto bankowe
Konfiguracja projektuImplementacja konta8Polimorfizm
Wskaźniki do funkcji w strukturachSymulowanie metodKoncepcja interfejsuImplementowanie interfejsówIteracja polimorficznaPodsumowanie: Greeter11Wzorce projektowe w C
Wzorzec SingletonWzorzec fabrykiWzorzec iteratoraPodsumowanie: fabryka loggera3Cykl życia obiektu
Wzorzec konstruktoraWzorzec destruktoraInicjalizacja na stosieKopia głębokaPodsumowanie: klasa opakowująca ciąg znaków6Dziedziczenie przez kompozycję
Osadzanie strukturZasada pierwszego elementuDostęp do elementów klasy nadrzędnejKonwersja w górę hierarchiiPodsumowanie: hierarchia kształtów9Projekt: Rysownik kształtów
Przegląd projektuImplementacja kołaImplementacja prostokątaZastosowanie polimorfizmuKontener kształtówPoćwicz samodzielnie: Kompilator C online