Назначение #ifdef перед main() в программе
Какова цель #ifdef ниже? И почему это позволяет мне проходить через мою программу при отладке (активная конфигурация решения = отладка), но не когда активная конфигурация решения = выпуск или при построении решения и активной конфигурации решения = релиз?
#ifdef RUN
int main(int argc, char* argv[])
{
Some functions
}
#endif
Я работаю с чужим унаследованным кодом и знаю, что могу просто удалить его, и он будет вести себя нормально, но я хочу понять, почему предыдущий кодер поместил эти директивы препроцессора в первую очередь.
2 ответа
Напомним, что в связанной C-программе может быть только одна функция main().
Поэтому, если он предназначен для использования в качестве библиотечного кода, main необходимо отключить (удалить при прекомпиляции).
Если он должен работать автономно, main следует оставить в.
Может использоваться для тестовых случаев файла. Он также может стать автономным сервером, на котором код библиотеки будет по-прежнему работать как код библиотеки, только через IPC, а не напрямую связан.
Для меня это плохая практика и отражает проблему в сборке, где программист на Си был более компетентен, чем инженер по сборке, который не мог понять, как правильно разделить компоненты. Рефакторинг нужен.
Я хотел бы рассмотреть следующее перед удалением:
- это тестовые случаи? (если да, рефакторинг в правильный тестовый код)
- действительно ли RUN когда-либо включен в системе? если да, то где и почему; если не безопаснее убрать скорее всего
- рассматривать
#ifdef RUN
#error
как способ сломать сборку, если вас удивляет, что флаг иногда определяется, или#ifndef
для наоборот. Заметьте, я сказал "рассмотреть"; пожалуйста, поймите, что это значит: сначала сломать сборку.
Например, когда нужно просто собрать библиотеку с любым main
функция, которая обычно не требует каких-либо main
функция. main
Функция используется для проверки чего-либо.