Почему GCC хранит пустые функции?

В большинстве случаев, если я хочу создать необязательную функцию в C, я просто создаю две функции, подобные этой:

#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

Итак, если символ не определен — когда функция отключено — в исполняемый файл компилируется пустая функция.

Углубившись в листинг сборки, кажется, что GCC компилирует и вызывает пустые функции, когда оптимизации отключены . Если оптимизация включена , а также с -O2и -O3, она компилирует только необходимый код обработки стека, но оптимизирует инструкции вызова. В целом функцию держит.

Примерно то же самое относится и к не-пустым, но неиспользованным методам.

Он должен просто выбросить все это, но это не так. Почему это поведение по умолчанию? И просто для любопытства:Как мне это устранить?

14
задан Jonathan Leffler 8 November 2014 в 07:21
поделиться