Atributos de variáveis em C

{getToc} $title={Índice}

Oque são atributos de variáveis?


Atributos de variáveis são propriedades especificas que podem ser atribuídas a uma variável, seja ela uma struct, ponteiro, int, uint …

Essa declaração se da por meio da palavra-chave “__attribute__” onde é possível especificar a uma variável um atributo especial, como exemplificado abaixo:
__attribute__ ((ATRIBUTE));

Onde :

  • ATRIBUTE : tipo de atributo da variável.

Alguns atributos são definidos genericamente para variáveis, ficando transparente para o desenvolvedor, porem, é importante em determinados casos saber modificar esses atributos.

Tipos de atributos de variáveis

Exitem diversos tipos de atributos, comum a todas as arquiteturas e especifico a cada uma delas, nos exemplos vamos abordar apenas alguns atributos de variáveis comuns, e utilizaremos o compilador online do site programiz. Para conferir todos os exemplos consulte a guia Referências.

__attribute__ ((alias))

Esse atributo permite dar um "apelidos" para uma variável, onde essa será correspondida através do nome do alias alvo, como exemplificado abaixo:


__attribute__ ((aligned ))

Especifica o tamanho(alinhamento) minimo em bytes, para uma variável ou estrutura. Para variáveis que não estão presentes em estruturas, é preservado o seu alinhamento natural do seu tipo, já para estruturas o alinhamento modifica o tamanho. Esse atributo é normalmente utilizado junto ao packed.

Abaixo um exemplo de uso disponibilizado no site developer.arm


__attribute__ ((cleanup))

O atributo cleanup executa uma função quando a variável é desalocada/sai de contexto. Esse atributo não pode ser utilizado em variáveis recebidas como parâmetros ou variáveis estáticas(não vão ser desalocadas)


__attribute__ ((deprecated))

Muito utilizados em drivers o atributo deprecated gera um aviso na compilação, que indica que a variável será removida em uma versão futura.


__attribute__ ((packed))

O atributo especifica que um campo de variável ou estrutura tem o menor alinhamento possível. Ou seja, um byte para uma variável e um bit para um campo, a menos que você especifique um valor maior com o aligned.

Outros

Abaixo uma lista de alguns atributos em comum para todas as arquiteturas:
  • __attribute__ ((warn_if_not_aligned))
  • __attribute__ ((alloc_size))
  • __attribute__ ((common))
  • __attribute__ ((copy))
  • __attribute__ ((unavailable))
  • __attribute__ ((mode))
  • __attribute__ ((nonstring))
  • __attribute__ ((weak))
  • __attribute__ ((section))
  • __attribute__ ((tls_model))
  • __attribute__ ((unused))
  • __attribute__ ((retain))
  • ...

Quais são as vantagens de utilizar atributos de variáveis?

Algumas das vantagens são:
  • Capacidade de controlar totalmente suas variáveis em nível de memoria.
  • Prevenir erros de desenvolvimento (bugs).
  • Melhor eficiência para o compilador.
Fornecer o contexto traz benefícios tanto ao compilador quanto ao leitor do código, porem ao utilizá-los indevidamente sem conhecimento prévio, pode acarretar em bugs difíceis de depurar.

Conclusão

O presente artigo tem como objetivo fazer um breve resumo sobre atributos de variáveis, e estimular ao leitor que pesquise mais sobre o assunto. 
Em aplicações esses atributos não são normalmente vistos, porem são uma ferramenta a mais que deve ser estudada pelo desenvolvedor.
Recomenda-se analisar os links disponibilizados na guia Referências.

Bruno Lima

Engenheiro de computação atuando em desenvolvimento de sistemas embarcados (Firmware) com microcontroladores e processadores (Linux Embarcado). Contribuidor de projetos públicos e fóruns de c/c++. linkedin github

4 Comentários

Deixe seu comentário ou sua sugestão!

  1. Cara, achei muito legal o clean up pra uma coisa muito específica: já declarar o ponteiro que vai receber um futuro malloc sem ter que preocupar com posicionar o free depois. Muito boa a iniciativa do blog, parabéns!

    ResponderExcluir
    Respostas
    1. Sim Natanael, é bem util, curti bastante utilizar em alguns casos.

      Excluir
  2. Muito bom, bem util os atributos.

    ResponderExcluir
Postagem Anterior Próxima Postagem

Formulário de contato