2008-12-08 10 views
9

Есть ли причина, почему большинство функций в драйвере устройства в Linux-коде определяется как статическое? Для этого есть причина?Статические функции в драйвере устройства Linux?

Мне сказали, что это для определения области охвата и предотвращения загрязнения пространства имен, может ли кто-нибудь объяснить это подробно, почему статическое определение используется в этом контексте?

ответ

17

Функции, объявленные статическими, не видны за пределами единицы перевода, в которой они определены (блок перевода в основном является .c файлом). Если функцию не нужно вызывать из-за пределов файла, она должна быть статической, чтобы не загрязнять глобальное пространство имен. Это приводит к тому, что конфликты между именами одинаковы. Экспортированные символы обычно обозначаются каким-то типом подсистемы, что еще больше уменьшает возможности конфликтов.

Часто указатели на эти функции оказываются в структурах, поэтому они фактически вызываются извне файла, в котором они определены, но не по имени их функции.

2

По тем же причинам вы используете статический код в любом коде. Вы должны только «публиковать» свои вызовы API, что-то еще открывает вам возможность злоупотреблять, например, возможность вызова внутренних функций извне драйвера, что почти наверняка будет катастрофическим.

Это хорошая практика программирования, чтобы сделать видимым только внешний мир, что необходимо. Вот что такое инкапсуляция.

2

Я согласен. Это обычная и разумная практика в любом коде C, а не только в коде ядра! Не думайте, что это подходит только для вещей низкого уровня, любой C-код, который простирается за один .c файл, должен был подумать об этом.