Menu
Coddy logo textTech

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 wielokrotnie w projekcie, kompilator wielokrotnie widzi te same deklaracje, co powoduje błędy. Często zdarza się to, 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 nagłówka używa trzech dyrektyw preprocesora, aby zawartość pliku nagłówkowego była przetwarzana 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 został, preprocesor kontynuuje działanie i natychmiast definiuje go za pomocą #define MATH_UTILS_H. Wszystko między tym miejscem a #endif jest uwzględniane podczas kompilacji.

Gdy ten nagłówek jest dołączany po raz drugi, MATH_UTILS_H jest już zdefiniowane, więc cały blok zostaje pominięty. Nazwa zabezpieczenia jest zwykle nazwą pliku zapisaną wielkimi literami, z podkreśleniami zamiast kropek i znaków specjalnych.

Każdy tworzony przez Ciebie plik nagłówkowy powinien mieć strażników dołączania. To standardowa praktyka, która zapobiega błędom kompilacji i sprawia, że Twój kod można bezpiecznie dołączać z dowolnego miejsca w projekcie.

challenge icon

Wyzwanie

Łatwy

Zabezpieczmy plik nagłówkowy przed wielokrotnym dołączaniem, dodając strażniki dołączania. Rozbudujesz narzędzie do witania z poprzedniej lekcji, ale tym razem zadbasz o to, aby plik nagłówkowy można było bezpiecznie dołączać wielokrotnie.

Utworzysz dwa pliki:

  • greet.h: Twój plik nagłówkowy zawierający deklarację funkcji greet. Tym razem ujmij całą jego zawartość w strażniki dołączania, używając symbolu GREET_H.
  • main.c: Twój 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* z imieniem 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 jedno wejście: imię (ciąg znaków).

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

REQUIRED OUTPUT FORMAT: <translation> [Your translated content here] </translation>

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 imieniem
    
    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