Nie używaj takich rzeczy jak „vps_t”.
Jest to błędem użycie typedef dla struktur i wskaźników. Gdy zobaczysz a
vps_t a;
co to znaczy w źródle?
Przeciwnie, jeśli to mówi
struct virtual_container *a;
możesz właściwie powiedzieć, co to jest „a”.
Wiele osób uważa, że typedefs „poprawia czytelność”. Skąd. Są przydatne tylko w przypadku:
(a) całkowicie nieprzezroczyste obiekty (gdzie typedef jest aktywnie używany do ukrycia tego, co jest przedmiotem).
Przykład: „pte_t” itp. Nieprzezroczyste obiekty, do których można uzyskać dostęp tylko za pomocą odpowiednich funkcji akcesora.
UWAGA! Nieprzezroczystość i „funkcje akcesora” same w sobie nie są dobre. Powodem, dla którego je mamy dla takich rzeczy jak pte_t itp., Jest to, że naprawdę tam jest absolutnie zero przenośnych informacji.
(b) Wyczyść typy liczb całkowitych, w których abstrakcja pomaga uniknąć nieporozumień, czy jest to „int” czy „long”.
u8 / u16 / u32 są idealnie dobranymi czcionkami, chociaż pasują do kategorii (d) lepiej niż tutaj.
UWAGA! Znowu - musi być ku temu powód . Jeśli coś jest „niepodpisane długo”, nie ma powodu, aby to robić
typedef unsigned long myflags_t;
ale jeśli istnieje wyraźny powód, dla którego w pewnych okolicznościach może to być „bez znaku int”, a w innych konfiguracjach może być „bez znaku długi”, to zdecydowanie skorzystaj z pisma maszynowego.
(c) gdy używasz rzadkiego, aby dosłownie utworzyć nowy typ do sprawdzania typu.
(d) Nowe typy, które są identyczne ze standardowymi typami C99, w pewnych wyjątkowych okolicznościach.
Chociaż oczy i mózg przyzwyczają się do krótkiego czasu przyzwyczajenia się do standardowych typów, takich jak „uint32_t”, niektórzy i tak sprzeciwiają się ich użyciu.
Dlatego specyficzne dla Linuksa typy „u8 / u16 / u32 / u64” i ich podpisane odpowiedniki, które są identyczne ze standardowymi typami, są dozwolone - chociaż nie są obowiązkowe w nowym kodzie.
Podczas edycji istniejącego kodu, który już korzysta z jednego lub drugiego zestawu typów, powinieneś dostosować się do istniejących wyborów w tym kodzie.
(e) Rodzaje bezpieczne do użytku w przestrzeni użytkownika.
W niektórych strukturach widocznych dla przestrzeni użytkownika nie możemy wymagać typów C99 i nie możemy użyć powyższego formularza „u32”. Dlatego używamy __u32 i podobnych typów we wszystkich strukturach współdzielonych z przestrzenią użytkownika.
Być może są też inne przypadki, ale zasadą powinno być NIGDY NIE NIGDY używać typedef, chyba że możesz wyraźnie dopasować jedną z tych reguł.
Zasadniczo wskaźnik lub struktura, która ma elementy, do których można uzyskać bezpośredni dostęp, nigdy nie powinna być czcionką maszynową.