Dlaczego GCC zachowuje puste funkcje?

W większości przypadków, jeśli chcę utworzyć opcjonalną funkcję w C, po prostu tworzę dwie takie funkcje:

<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>

Jeśli symbol jest nieokreślony - gdy funkcja jest wyłączona - pusta funkcja jest kompilowana do pliku wykonywalnego.

Zagłębiając się w listę zespołów, wygląda na to, że GCCkompiluje i dzwoni puste funkcje, gdyoptymalizacje są wyłączone. Jeślioptymalizacje są włączone, także z-O2 i-O3, tokompiluje tylko niezbędny kod obsługi stosu, ale optymalizuje instrukcje wywołania. W sumie utrzymuje funkcję.

To samo dotyczy niepustych, ale nieużywanych metod.

Powinien po prostu wyrzucić całość, ale tak nie jest. Dlaczego jest to zachowanie domyślne? I tylko z ciekawości: jak mogę to wyeliminować?

questionAnswers(2)

yourAnswerToTheQuestion