Por que o GCC mantém funções vazias?

Na maioria dos casos, se eu quiser criar um recurso opcional em C, eu simplesmente criar duas funções como esta:

<code>#ifdef OPTIONAL_SOMETHING
void do_something(int n, const char *s)
{
    while (n--) {
        printf("%s", s);
    }

    /* ...You might get the point, really do something... */
}
#else
void do_something(int n, const char *s)
{
    /* Empty body */
}
#endif
</code>

Portanto, se o símbolo for indefinido - quando o recurso estiver desabilitado - uma função vazia será compilada no executável.

Analisando a lista de montagem, parece que o GCCcompila e chama as funções vazias quando ootimizações estão desativadas. Se ootimizações estão ativadas, Também com-O2 e-O3, istocompila apenas o código de manipulação de pilha necessário, mas otimiza as instruções de chamada. Tudo em tudo, mantém a função.

O mesmo se aplica aos métodos não vazios, mas não utilizados.

Deveria simplesmente jogar fora a coisa toda, mas isso não acontece. Por que esse é o comportamento padrão? E só por curiosidade: como posso eliminar isso?

questionAnswers(2)

yourAnswerToTheQuestion