Menu
CoddyTech

Zabezpieczenia przed wielokrotnym dołączeniem

Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 2 z 61.

Gdy plik nagłówkowy zostaje dołączony do projektu wiele razy, kompilator wielokrotnie widzi te same deklaracje, co powoduje błędy. Zdarza się to często, gdy wiele plików dołącza ten sam plik nagłówkowy lub gdy pliki nagłówkowe dołączają się nawzajem. Strażniki dołączania rozwiązują ten problem.

Osłona dołączania używa trzech dyrektyw preprocesora, aby zagwarantować, że zawartość pliku nagłówkowego zostanie przetworzona tylko raz:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif

Oto jak to działa: #ifndef MATH_UTILS_H sprawdza, czy symbol MATH_UTILS_H nie został jeszcze zdefiniowany. Jeśli nie, preprocesor kontynuuje działanie i natychmiast definiuje go za pomocą #define MATH_UTILS_H. Wszystko między tym punktem a #endif zostaje uwzględnione podczas kompilacji.

Gdy ten plik nagłówkowy jest dołączany po raz drugi, MATH_UTILS_H jest już zdefiniowany, więc cały blok zostaje pominięty. Nazwa strażnika to zazwyczaj nazwa pliku zapisana wielkimi literami, z kropkami i znakami specjalnymi zastąpionymi podkreśleniami.

Każdy utworzony przez Ciebie plik nagłówkowy powinien mieć strażniki dołączania. To standardowa praktyka, która zapobiega błędom kompilacji i sprawia, że kod można bezpiecznie dołączać w dowolnym miejscu projektu.

challenge icon

Wyzwanie

Łatwy

Zabezpieczmy plik nagłówkowy przed wielokrotnym dołączeniem, dodając strażników dołączenia. Rozbudujesz narzędzie do powitań z poprzedniej lekcji, ale tym razem zadbasz o to, by plik nagłówkowy można było bezpiecznie dołączać wielokrotnie.

Utworzysz dwa pliki:

  • greet.h: Plik nagłówkowy zawierający deklarację funkcji greet. Tym razem obejmij całą jego zawartość strażnikami dołączenia, używając symbolu GREET_H.
  • main.c: Główny plik, który dołącza plik nagłówkowy, implementuje funkcję greet i wywołuje ją z main().

Funkcja greet powinna przyjmować parametr const char* reprezentujący imię i wypisywać:

Hello, Alice!

Twój plik nagłówkowy powinien mieć następującą strukturę:

#ifndef GREET_H
#define GREET_H

// function declaration here

#endif

Otrzymasz jedną wartość wejściową: imię (ciąg znaków).

Wypisz powitanie dokładnie w formacie pokazanym powyżej, zastępując Alice podanym imieniem.

Spróbuj swoich sił

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

// TODO: Zaimplementuj funkcję greet, która wypisuje "Hello, <name>!"

int main() {
    char name[100];
    scanf("%s", name);
    
    // TODO: Wywołaj funkcję greet z argumentem name
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C online