Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Algorytmy i podstawy informatyki

Którym słowem kluczowym w języku z rodziny C należy posłużyć się, aby przypisać alternatywną nazwę dla istniejącego typu danych?

A. union
B. typedef
C. enum
D. switch

Pytanie z egzaminu CKE, styczeń 2020 (arkusz EE.09-SG-20.01).

Słowem kluczowym służącym do nadania alternatywnej nazwy istniejącemu typowi danych w językach z rodziny C jest typedef. Nie tworzy ono nowego typu w sensie zupełnie osobnej struktury semantycznej, tylko definiuje alias, czyli wygodniejszą nazwę dla typu, który już istnieje. Przykład: typedef unsigned int uint; pozwala później pisać uint licznik; zamiast unsigned int licznik;. W praktyce często używa się tego przy strukturach, wskaźnikach funkcyjnych albo typach zależnych od platformy. Klasyczny zapis to np. typedef struct Punkt { int x; int y; } Punkt;, dzięki czemu nie trzeba za każdym razem pisać struct Punkt. Moim zdaniem to jedna z tych rzeczy w C, które na początku wyglądają trochę dziwnie, ale bardzo poprawiają czytelność większego kodu. W dobrych praktykach branżowych typedef stosuje się wtedy, gdy alias naprawdę upraszcza kod albo ukrywa szczegóły implementacyjne, np. w bibliotekach systemowych i API. Trzeba jednak uważać, żeby nie przesadzić, bo zbyt wiele aliasów może utrudnić zrozumienie, jaki typ faktycznie jest używany pod spodem.
W tym pytaniu chodzi o mechanizm nadawania alternatywnej nazwy istniejącemu typowi danych, a nie o tworzenie zestawu stałych, wariantowego obszaru pamięci czy instrukcję sterującą. enum służy do definiowania typu wyliczeniowego, czyli zbioru nazwanych wartości całkowitych, na przykład dni tygodnia, statusów albo trybów pracy programu. To może wyglądać podobnie, bo też dotyczy typów danych, ale jego celem nie jest zrobienie aliasu dla typu już istniejącego. enum tworzy własną grupę symbolicznych wartości, a nie skrót nazwy typu.

union również dotyczy typów, ale działa zupełnie inaczej. Unia pozwala kilku polom współdzielić ten sam fragment pamięci. Przydaje się na przykład w programowaniu niskopoziomowym, sterownikach, protokołach binarnych czy oszczędzaniu pamięci, ale nie jest narzędziem do nazywania typu inaczej. Częsty błąd polega na tym, że ktoś widzi słowa związane z definicją danych i zakłada, że każde z nich może robić alias. No nie do końca.

switch to już w ogóle inna kategoria, bo jest instrukcją sterującą przepływem programu. Używa się jej do wyboru jednej z wielu ścieżek wykonania na podstawie wartości wyrażenia, trochę jak uporządkowana alternatywa dla wielu if else. Nie ma ona związku z deklarowaniem typów ani z systemem typów języka C. Poprawnym wyborem jest typedef, ponieważ właśnie ono w standardowym C służy do przypisania dodatkowej nazwy typowi, np. typedef long long int64_like;. Z mojego doświadczenia warto zapamiętać prostą zasadę: enum tworzy zestaw nazwanych wartości, union opisuje współdzieloną pamięć, switch wybiera gałąź kodu, a typedef nadaje nazwę typowi.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.