C · Avançado · Português · Técnico
símbolo fraco
Símbolo que o linker aceita ver substituído por outra definição forte de mesmo nome. É extensão do gcc e do clang, com __attribute__((weak)), usada para implementações padrão sobrescrevíveis.
Onde usar
Aparece em firmware e bibliotecas: um handler de interrupção padrão é fraco, e o projeto o substitui definindo uma função com o mesmo nome. Não faz parte do C padrão.
Em código
/* lib.c: versão padrão */
__attribute__((weak)) void tick(void) {}
/* app.c: a definição forte vence */
void tick(void) { /* meu código */ }Exemplos
O handler padrão é um símbolo fraco; é só definir o seu com o mesmo nome.
A definição forte do app vence a fraca da biblioteca.
Cuidado
Esperar portabilidade: o atributo é extensão de compilador, e o comportamento depende do linker e do formato do objeto.
Sinônimos
weak symbol
Antônimos
símbolo forte