C/Typy złożone: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Lethern (dyskusja | edycje)
revert, wytłumaczenie jest w dyskusji, odnieś się do niej najpierw. przed dalszą edycją prosze napisać na stronie dyskusji modułu odpowiedź na moje wątpliwości
Po co kazać czytelnikowi domyślać się co jest tym "odpowiednim" słowem kluczowym? Aby zachować logiczny ciąg treści zmieniono też kolejność poszczególnych objaśnień.
Linia 171:
== Wspólne własności typów wyliczeniowych, unii i struktur ==
 
Warto zwrócić uwagę, że język C++ przy deklaracji zmiennych typów wyliczeniowych, unii lub struktur nie wymaga przed nazwą typu odpowiedniego słowa kluczowego <tt>typedef</tt>. Na przykład poniższy kod jest poprawnym programem C++:
<source lang="c">
enum Enum { A, B, C };
Linia 188:
Nie jest to jednak poprawny kod C i należy o tym pamiętać szczególnie jeżeli uczysz się języka C korzystając z kompilatora C++.
Należy również pamiętać, że po klamrze zamykającej definicje '''musi''' następować średnik. Brak tego średnika jest częstym błędem powodującym czasami niezrozumiałe komunikaty błędów. Jedynym wyjątkiem jest natychmiastowa definicja zmiennych danego typu, na przykład:
<source lang="c">
struct Struktura {
int pole;
} s1, s2, s3;
</source>
 
Definicja typów wyliczeniowych, unii i struktur jest lokalna do bloku. To znaczy, możemy zdefiniować strukturę wewnątrz jednej z funkcji (czy wręcz wewnątrz jakiegoś bloku funkcji) i tylko tam będzie można używać tego typu.
 
Częstym idiomem w C jest użycie <tt>typedef</tt> od razu z definicją typu, by uniknąć pisania <tt>enum</tt>, <tt>union</tt> czy <tt>struct</tt> przy deklaracji zmiennych danego typu.
<source lang="c">
Linia 213 ⟶ 204:
Struktura s1;
</source>
 
Należy również pamiętać, że po klamrze zamykającej definicje '''musi''' następować średnik. Brak tego średnika jest częstym błędem powodującym czasami niezrozumiałe komunikaty błędów. Jedynym wyjątkiem jest natychmiastowa definicja zmiennych danego typu, na przykład:
<source lang="c">
struct Struktura {
int pole;
} s1, s2, s3;
</source>
 
Definicja typów wyliczeniowych, unii i struktur jest lokalna do bloku. To znaczy, możemy zdefiniować strukturę wewnątrz jednej z funkcji (czy wręcz wewnątrz jakiegoś bloku funkcji) i tylko tam będzie można używać tego typu.
 
=== Wskaźnik na unię i strukturę ===