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