Как скомпилировать проект C больше чем с одной основной функцией?

Я плохо знаком с C и теперь читаю некоторый учебник и собирающийся применять его примеры.

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

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

(BTW, я использовал много IDE, MonoDevelop, спокойного создателя, VS2010, Codebloks...), я в настоящее время - Создатель QT использования, Это, кажется, очень хороший IDE.

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

Править:

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

Так, Нет ли никакой путь, такой как очистка проекта, затем скомпилируйте - просто - один файл, который я должен выполнить??? BTW, В JAVA, мы можем запустить программу, что cotains больше чем один основной (IDE дают мне выбор среди них),

11
задан Muhammad Hewedy 21 May 2010 в 05:39
поделиться

10 ответов

На самом деле, Dev-C++ поддерживает работу с несколькими основными файлами, которые не являются частью какого-либо проекта, поэтому я могу создавать и запускать столько файлов, сколько мне нужно.

Спасибо всем, кто участвует в корпоративе :) Удачи всем.

Также, для Linux/win я нашел Code::Blocks, который делает этот трюк. спасибо.

1
ответ дан 3 December 2019 в 04:31
поделиться

Что вы пытаетесь сделать с несколькими функциями main ?

Если вы пытаетесь скомпилировать несколько разных программ одновременно, вам нужно скомпилировать каждую из них отдельно (т.е. только один главный на программу).

Если вы пытаетесь скомпилировать одну программу и хотите, чтобы выполнялись несколько основных функций всех , вы не сможете. Вам нужно указать только один main , а остальные переименовать во что-нибудь другое (и вызвать их из единственного main в том порядке, в котором они должны запускаться).

Если вы пытаетесь использовать только одну из функций main в качестве единственной точки входа в свою программу и игнорируете другие, то вам не следует включать файлы с другим main s, когда вы делаете ссылку. Я предлагаю поместить каждый main в отдельный файл, если вы хотите их сохранить, и включать только один из этих основных файлов при компоновке / компиляции.

Если вы получили эту ошибку по ошибке, то, вероятно, вы делаете что-то не так с проектом в вашей среде IDE. Возможно, вы случайно пытаетесь скомпилировать несколько разных программ в одну? Возможно, вам потребуется указать каждый файл, содержащий main , как отдельный продукт сборки.C не похож на Java, где вы можете поместить метод main внутри каждого класса и указать, какой из них вызывать; main в C - это глобальное имя.

10
ответ дан 3 December 2019 в 04:31
поделиться

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

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

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

0
ответ дан 3 December 2019 в 04:31
поделиться

ЕСЛИ вы используете компоновщик MS, используйте параметр компоновщика / FORCE: MULTIPLE. Победит первый встреченный главный символ. Не уверен, какой вариант подходит для других линкеров.

0
ответ дан 3 December 2019 в 04:31
поделиться

Каждая программа должна иметь только одну главную функцию. Однако main может вызывать любую функцию, которую вы хотите (включая себя, хотя это может сбивать с толку). Таким образом, вам следует разбить программу на логические части.

2
ответ дан 3 December 2019 в 04:31
поделиться

В вашем приложении не может быть более одной точки входа. Когда запускается последний исполняемый файл, вызывается функция точки входа (основная) . И это не может быть двусмысленным.

Итак, если вы хотите вызывать их по одному, вы можете связать их следующим образом:

void main1() {} /* Note that these aren't called main. */
void main2() {}
...

int main(int argc, char* argv[]) {
    main1();
    main2();
    return 0;
}

Их можно даже вызывать с помощью потоков (например, boost.Thread), чтобы они работали параллельно. Но вы не можете связать вместе несколько функций с именем main .

Если вместо этого вы хотите, чтобы каждая из них была отдельными программами, вам придется связать их отдельно.

6
ответ дан 3 December 2019 в 04:31
поделиться

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

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

0
ответ дан 3 December 2019 в 04:31
поделиться

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

0
ответ дан 3 December 2019 в 04:31
поделиться

Как многие уже говорили, у вас может быть только один главный файл для каждой программы. Вы же не хотите создавать новый проект для каждого примера, просматривая книгу. Это понятно, но в основном вам придется это сделать. Я вижу две альтернативы:

  1. Используйте новую функцию проекта в своей среде IDE (например, VS2010). Это сделает за вас всю тяжелую работу. Вы всегда можете удалить их позже.
  2. Если вы не хотите хранить код, просто очистите файл (или даже функцию main ()) и используйте ее повторно. С книжными примерами вы, вероятно, никогда не вернетесь к коду, поэтому просто удалите его.
2
ответ дан 3 December 2019 в 04:31
поделиться

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

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
ответ дан 3 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: