Как скомпилировать проект C с более чем одной основной функцией? - PullRequest
10 голосов
/ 21 мая 2010

Я новичок в C, а сейчас читаю какой-то учебник и собираюсь применить его примеры.

Проблема в том, что всякий раз, когда я создаю новый проект и пытаюсь поместить более одного файла, который содержит основную функцию, компоновщик (как я объясняю, говоря:

/home/mohammed/tmp/abcd/main.c:4: multiple definition of `main'

(Кстати, я использовал много IDE, MonoDevelop, QT creator, VS2010, Codebloks, ...) В настоящее время я использую QT Creator. Кажется, это очень хорошая среда разработки.

Итак, нет решения для решения такой проблемы ??

EDIT:

Я спрашиваю, потому что я нахожусь в стадии обучения, и сейчас не занимаюсь настоящим программированием. Мне просто нужен простой способ создания программ на C без необходимости создавать отдельный проект для каждого примера книги. В то же время я не хочу использовать командную строку Gedit / VI +.

Итак, нет ли способа очистить проект, а затем скомпилировать - просто - один файл, который мне нужно запустить ??? Кстати, в JAVA мы можем запустить программу, которая содержит более одного основного (IDE дает мне выбор среди них)

Ответы [ 14 ]

0 голосов
/ 21 мая 2010

попробуйте использовать статическое ключевое слово, например ::10000

file1.cpp:

#ifdef RUN_FILE1
#define STATIC static
#else
#define STATIC
#endif

int STATIC main(int argc, char **argv(){}

file2.cpp:

#ifdef RUN_FILE2
#define STATIC static
#else
#define STATIC
#endif

int STATIC main(int argc, char **argv(){}

для компиляции добавить /DRUN_FILE2 или /DRUN_FILE1.

Просто идея.

0 голосов
/ 21 мая 2010

Как уже говорили другие, ваш проект может иметь только одну основную функцию.

Почему вы пытаетесь использовать более одной основной функции? Это потому, что вы помещаете несколько небольших примеров программ в один проект, и у каждой из них есть основной? В этом случае вам может потребоваться создать отдельный проект для каждого примера, чтобы ваша среда IDE не просила компилятор компилировать / связывать исходный код из нескольких примеров в одну программу. Ваша IDE может также поддерживать концепцию, такую ​​как цель, которая позволяет вам хранить код для нескольких связанных программ в одном проекте и затем выбирать, какую программу (цель) фактически построить. Затем IDE скомпилирует / свяжет только файлы в этой цели.

0 голосов
/ 21 мая 2010

Вы не можете иметь несколько определений основного. «Основная» функция - это то, что, по сути, определяет, что делает ваша программа. Если бы у вас было несколько копий основного, какой из них вы ожидаете выполнить?

Решением вашей проблемы является использование библиотек; если вы хотите повторно использовать функциональность, то вам следует создать библиотеку, которая в основном идентична программе, за исключением того, что, хотя она имеет функции и данные (например, программу), у нее нет специальной функции, называемой «main», и, следовательно, не имеет «точки входа», где должно начинаться выполнение, когда ОС дважды щелкает по нему или иным образом загружается. Библиотеки бывают двух вариантов: общие / динамические и статические. Либо один должен сделать. Каждая создаваемая вами программа будет иметь свою основную функцию, но вы можете без проблем использовать свою библиотеку в разных программах.

Теперь о практическом элементе создания библиотеки ... см. Мой шаблон проекта библиотеки C ++ .

0 голосов
/ 21 мая 2010

Полагаю, одна из ваших IDE автоматически создает файл с функцией main. Посмотрите вокруг, чтобы увидеть, был ли он уже создан.

...