Pergunta

Existe uma razão pela qual a maioria definição de função no driver de dispositivo no código do Linux é definido como estático? Existe uma razão para isso?

Foi-me dito isto é para o escopo e para evitar a poluição namespace, alguém poderia explicar em detalhes por definição estática é usado neste contexto?

Foi útil?

Solução

Funções declarou estática não são visíveis fora da unidade de tradução são definidos em (a unidade de tradução é basicamente um arquivo .c). Se uma função não precisa ser chamado de fora o arquivo, então ela deve ser feita estática de modo a não poluir o namespace global. Isso faz com que os conflitos entre os nomes que são os mesmos são menos provável de acontecer. símbolos exportados são normalmente identificados com algum tipo de tag subsistema, o que reduz ainda mais a possibilidade de conflitos.

Muitas vezes, os ponteiros para essas funções acabam em estruturas, para que eles são realmente chamados de fora do arquivo que eles são definidos no, mas não pelo seu nome da função.

Outras dicas

Pelas mesmas razões que você usa estática em qualquer código. Você só deve 'publicar' suas chamadas de API, mais nada lhe abre para o abuso, como ser capaz de chamar funções internas de fora do motorista, algo que certamente seria catastrófico.

É uma boa prática de programação apenas para tornar visível para o mundo exterior o que é necessário. Isso é o que encapsulamento é tudo.

Concordo. Esta é uma prática comum e sábio em qualquer código C - código não apenas do kernel! Não vá pensando isso só é apropriado para baixo material nível, qualquer código C que se estende passado um arquivo .c deveria ter pensado dada a este.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top