Статические функции в драйвере устройства Linux? - PullRequest
10 голосов
/ 08 декабря 2008

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

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

Ответы [ 3 ]

17 голосов
/ 08 декабря 2008

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

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

2 голосов
/ 23 января 2012

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

2 голосов
/ 08 декабря 2008

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

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

...