2008-12-08 32 views
9

Czy istnieje powód, dla którego większość definicji funkcji w sterowniku urządzenia w kodzie Linuksa jest zdefiniowana jako statyczna? Czy istnieje ku temu powód?Funkcje statyczne w sterowniku urządzenia linuksowego?

Powiedziano mi, że chodzi o ustalanie zakresu i zapobieganie zanieczyszczaniu przestrzeni nazw, czy ktoś mógłby wyjaśnić szczegółowo, dlaczego w tym kontekście używana jest definicja statyczna?

Odpowiedz

17

Funkcje zadeklarowane jako statyczne nie są widoczne poza jednostką tłumaczeniową, w której są zdefiniowane (jednostka tłumaczeniowa jest w zasadzie plikiem .c). Jeśli funkcja nie musi być wywoływana spoza pliku, powinna być ustawiona statycznie, aby nie zanieczyszczać globalnej przestrzeni nazw. To sprawia, że ​​konflikty między nazwami, które są takie same, są mniej prawdopodobne. Wyeksportowane symbole są zwykle identyfikowane za pomocą jakiegoś znacznika podsystemu, co dodatkowo zmniejsza zakres konfliktu.

Często wskaźniki do tych funkcji kończą się na structs, więc są one wywoływane spoza pliku, w którym są zdefiniowane, ale nie przez ich nazwę funkcji.

2

Z tych samych powodów używasz statyczny w dowolnym kodzie. Powinieneś tylko "publikować" swoje wywołania API, wszystko inne otwiera cię na nadużycia, takie jak możliwość wywoływania wewnętrznych funkcji spoza sterownika, coś, co prawie na pewno byłoby katastrofalne.

Dobrą praktyką programistyczną jest pokazywanie światu zewnętrznemu tego, co jest konieczne. O to właśnie chodzi w hermetyzacji.

2

Zgadzam się. Jest to powszechna i mądra praktyka w każdym kodzie C - nie tylko w kodzie jądra! Nie myśl, że to jest właściwe tylko dla rzeczy o niskim poziomie, każdy kod C, który rozciąga się po jednym pliku .c powinien pomyśleć o tym.

Powiązane problemy