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