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?