Pergunta

Em C: Por que é para que apenas funções embutidas com ligação interna (ou seja, declarada com estática) podem fazer referência (ou seja, endereço de cópia, leitura, gravar ou ligar) uma variável ou função no escopo do arquivo com duração de armazenamento estático, enquanto outras funções em linha podem não ?

Foi útil?

Solução

É assim que as coisas são definidas.

A função inlinada seria inserida no módulo onde é chamado. Portanto, ele não pode acessar as coisas privadas em seu módulo, onde está definido.

Se a função inlinada for usado nesse módulo (ligação interna). Em seguida, é seguro conceder um acesso ao material "privado" desse módulo.

Outras dicas

Um objeto ou função com o escopo do arquivo, declarado com o especificador de armazenamento "estático", possui uma ligação interna. Embora sua vida útil seja toda a execução do programa, um objeto com ligação interno não é declarado (ou seja, visível de) outras unidades de tradução.

Para uma função embutida com a ligação externa, o compilador pode:

  • Ligar para instância dentro da unidade de tradução em que a função é declarada
  • realizar uma substituição embutida no ponto da chamada
  • criar um idêntico, mas separado instância da função dentro da unidade de tradução de chamada

Nos dois últimos casos, objetos com ligação interna não seriam visíveis. Portanto, uma função embutida com a ligação externa não pode fazer referência a um identificador com a ligação interna.

Além disso, ele "não deve conter uma definição de um objeto modificável com duração estática de armazenamento", pois isso pode resultar em várias instâncias desse objeto que provavelmente não é o comportamento pretendido.

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