2012-02-24 11 views
5

Przechodzę przez małe konwencje, takie jak __KERNEL__.Jakie jest znaczenie wyprzedzających i końcowych znaków w identyfikatorach jądra Linuksa?

Czy w tym przypadku jest to konwencja nazewnictwa używana przez twórców jądra, czy też jest to przyczyna specyficzna dla syntaktyki do nazywania makra w ten sposób?

Istnieje wiele przykładów tego w całym kodzie.

Na przykład niektóre funkcje i zmienne zaczynają się od _ lub nawet __.

Czy istnieje ku temu szczególny powód?

Wydaje się dość powszechnie stosowane i potrzebuję tylko wyjaśnienia, czy te rzeczy mają cel syntaktyczny, czy jest to po prostu konwencja nazewnictwa.

Ponadto widzę wiele deklarowanych przez użytkownika typów, takich jak uid_t. Ponownie przyjmuję, że jest to konwencja nazewnictwa informująca czytelnika, że ​​jest to typ zdefiniowany przez użytkownika?

+2

'_t' mówi, że jest to typ stworzony przez' typedef'. – Linuxios

+0

Pozdrawiam za odpowiedź. Przykro mi, aby wyjaśnić niejednoznaczność, kiedy mówię typy zdefiniowane przez użytkownika, mam na myśli te zdefiniowane przez typedef. –

+1

Pewnie. Jeśli chodzi o podkreślenia, domyślam się, że makro nie jest używane tam, gdzie nie było zamierzone, gdy ma niejednoznaczną nazwę z funkcją lub klasą. – Linuxios

Odpowiedz

4

Istnieje kilka przypadków:

  • W nagłówkach przeciwległej publicznych, czyli coś, co LibC przejmie i oddanie pod /usr/include/linux standardy określić, które symbole powinny być określone i wszelkie inne symbole charakterystyczne dla systemu powinny zacznij od podkreślenia i wielkiej litery lub dwóch podkreśleń. To jest powód dla __KERNEL__ w szczególności, ponieważ jest używany w nagłówkach, które są zawarte zarówno w jądrze, jak iw bibliotece libc, a niektóre deklaracje są różne.
  • W kodzie wewnętrznym konwencja zwykle oznacza, że ​​symbol __something jest kołem pociągowym dla something, z wyłączeniem niektórych funkcji zarządzania, często blokujących. To jest powód rzeczy takich jak __d_lookup. Podobna konwencja dla wywołań systemowych jest taka, że ​​sys_something jest punktem wejścia wywołania systemowego, który obsługuje przełączanie kontekstu do iz jądra i wywołuje do_something, aby wykonać rzeczywistą pracę.
  • Sufiks _t jest standardową konwencją biblioteki dla typedefs. Na przykład. size_t, ptrdiff_t, foff_t i tym podobne. Kod jądra jest zgodny z tą konwencją także dla jego wewnętrznych typów.
+0

Dzięki za odpowiedź. Z całą dokumentacją stylu kodującą jądro, jestem zaskoczony, że nie znalazłem zbyt wiele dokumentacji na temat konwencji nazewnictwa w jądrze. Czy po prostu podnosiłeś te rzeczy, robiąc hakowanie jądra? – KarateSnowMachine

+0

@KarateSnowMachine: Cóż, pierwszy i ostatni punkt pochodzą ze standardu C. Punkt środkowy, w większości tak. Nie zrobiłem żadnego poważnego hakowania jądra, ale miałem zadanie w kernelu z powrotem w szkole, więc musiałem przeczytać trochę kodu (szczególnie, aby dwukrotnie sprawdzić blokowanie). –