В большинстве случаев, если я хочу создать необязательную функцию в 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
Итак, если символ undefined - когда функция отключена, в исполняемый файл скомпилируется пустая функция.
Переходя к списку сборок, кажется, что GCC компилирует и вызывает пустые функции, когда оптимизация отключена. Если оптимизация включена, а также с -O2
и -O3
, она компилирует только необходимый код обработки стека, но оптимизирует инструкции по вызову. В целом он сохраняет функцию.
Примерно так же применяется для непустых, но неиспользуемых методов.
Он должен просто выбросить все это, но это не так. Почему это поведение по умолчанию? И только ради любопытства: как я могу это устранить?