назначение #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 для наоборот. Заметьте, я сказал «рассмотреть»; пожалуйста, поймите, что это значит: сначала сломать сборку.
2

Другие решения

Например, когда нужно просто собрать библиотеку с любым main функция, которая обычно не требует каких-либо main функция. main Функция используется для проверки чего-либо.

1

По вопросам рекламы [email protected]