Я плохо знаком с 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 дают мне выбор среди них),
На самом деле, Dev-C++ поддерживает работу с несколькими основными файлами, которые не являются частью какого-либо проекта, поэтому я могу создавать и запускать столько файлов, сколько мне нужно.
Спасибо всем, кто участвует в корпоративе :) Удачи всем.
Также, для Linux/win я нашел Code::Blocks, который делает этот трюк. спасибо.
Что вы пытаетесь сделать с несколькими функциями main
?
Если вы пытаетесь скомпилировать несколько разных программ одновременно, вам нужно скомпилировать каждую из них отдельно (т.е. только один главный
на программу).
Если вы пытаетесь скомпилировать одну программу и хотите, чтобы выполнялись несколько основных
функций всех , вы не сможете. Вам нужно указать только один main
, а остальные переименовать во что-нибудь другое (и вызвать их из единственного main
в том порядке, в котором они должны запускаться).
Если вы пытаетесь использовать только одну из функций main
в качестве единственной точки входа в свою программу и игнорируете другие, то вам не следует включать файлы с другим main
s, когда вы делаете ссылку. Я предлагаю поместить каждый main
в отдельный файл, если вы хотите их сохранить, и включать только один из этих основных файлов при компоновке / компиляции.
Если вы получили эту ошибку по ошибке, то, вероятно, вы делаете что-то не так с проектом в вашей среде IDE. Возможно, вы случайно пытаетесь скомпилировать несколько разных программ в одну? Возможно, вам потребуется указать каждый файл, содержащий main
, как отдельный продукт сборки.C не похож на Java, где вы можете поместить метод main
внутри каждого класса и указать, какой из них вызывать; main
в C - это глобальное имя.
У вас не может быть нескольких определений main. «Основная» функция - это то, что, по сути, определяет, что делает ваша программа. Если бы у вас было более одной копии main, какую из них вы ожидали бы запустить?
Решение вашей проблемы - использовать библиотеки; если вы хотите повторно использовать функциональные возможности, вам следует создать библиотеку, которая в основном идентична программе, за исключением того, что, хотя в ней есть функции и данные (например, программа), в ней нет специальной функции, называемой «основная», и, следовательно, не имеет «точки входа», с которой должно начаться выполнение, если бы по нему дважды щелкнули или иным образом загрузила бы ОС. Библиотеки бывают двух вариантов: общие / динамические и статические. Либо надо делать.Каждая программа, которую вы создаете, будет иметь свою собственную основную функцию, но вы можете без проблем повторно использовать свою библиотеку в других программах.
Теперь о практическом элементе создания библиотеки ... см. Мой Шаблон проекта библиотеки C ++ .
ЕСЛИ вы используете компоновщик MS, используйте параметр компоновщика / FORCE: MULTIPLE. Победит первый встреченный главный символ. Не уверен, какой вариант подходит для других линкеров.
Каждая программа должна иметь только одну главную функцию. Однако main может вызывать любую функцию, которую вы хотите (включая себя, хотя это может сбивать с толку). Таким образом, вам следует разбить программу на логические части.
В вашем приложении не может быть более одной точки входа. Когда запускается последний исполняемый файл, вызывается функция точки входа (основная) . И это не может быть двусмысленным.
Итак, если вы хотите вызывать их по одному, вы можете связать их следующим образом:
void main1() {} /* Note that these aren't called main. */
void main2() {}
...
int main(int argc, char* argv[]) {
main1();
main2();
return 0;
}
Их можно даже вызывать с помощью потоков (например, boost.Thread), чтобы они работали параллельно.
Но вы не можете связать вместе несколько функций с именем main
.
Если вместо этого вы хотите, чтобы каждая из них была отдельными программами, вам придется связать их отдельно.
Как говорили другие, ваш проект может иметь только одну главную функцию.
Почему вы пытаетесь выполнять несколько основных функций? Это потому, что вы помещаете несколько небольших программ-примеров в один проект, и у каждой из них есть главная? В этом случае вам может потребоваться создать отдельный проект для каждого примера, чтобы ваша IDE не просила компилятор скомпилировать / связать источник из нескольких примеров в одну программу. Ваша IDE может также поддерживать такую концепцию, как цель, которая позволяет вам хранить код для нескольких связанных программ в одном проекте, а затем выбирать, какую программу (цель) фактически построить. Затем IDE скомпилирует / свяжет только файлы в этой цели.
Я предполагаю, что одна из ваших IDE автоматически создает файл с функцией main
. Проверьте, не был ли он уже создан.
Как многие уже говорили, у вас может быть только один главный файл для каждой программы. Вы же не хотите создавать новый проект для каждого примера, просматривая книгу. Это понятно, но в основном вам придется это сделать. Я вижу две альтернативы:
попробуйте использовать ключевое слово 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
.
Просто идея.