#include <iostream>
void dummyfunction(void)
{
std::cout<< "this is";
}
ошибка:
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
.Как я могу это исправить??
Ну не знаю, есть? То, что вы показываете, в порядке, хотя интервалы можно было бы улучшить. Вам нужно будет вызвать dummyfunction();
, прежде чем он сделает что-либо из main()
и т. д.. Добавьте в конце int main() { dummyfunction(); }
(для справки, функция main()
является точкой входа для запуска программы) — person Nguyên Khôi schedule 29.06.2021
Название вашего вопроса не является конкретным. — person Nguyên Khôi schedule 29.06.2021
В программе C/C++ функция
main()
обеспечивает точку входа для запуска программы. (есть некоторые специализированные.ctor
функции, вызываемые передmain()
, с которыми вы редко, если вообще когда-либо, сталкиваетесь)Итак, то, что у вас есть выше, объявляет функцию
dummyfunction();
, но нет функцииmain()
, которую компоновщикld
может использовать в качестве точки входа (адрес, по которому управление программой передается из оболочки в вашу программу для запуска)Ваши сообщения об ошибках совершенно ясно говорят о том, что проблема не в
main()
. Чтобы исправить ошибку, вам нужно определить функциюmain()
, где правильными вызовами являются либоint main (void)
, либоint main (int argc, char *argv[])
(вы увидите, чтоchar *argv[]
записывается какchar **argv
). Также есть переменнаяenv
, но здесь она не важна. Если ваша программа не принимает аргументов в командной строке, тоint main (void)
подходит. В C++void
можно опустить, так как это имеет значение только для C.Включая
main()
, ваша программа будет компилироваться с:(примечание: добавление
'\n'
в конце"this is\n"
, чтобы вывод вашей программы заканчивался новой строкой, как указано в POSIX)Пример использования/вывода
Я только что назвал исполняемый файл программы
dummyfunction
, но вы можете назвать его как угодно.Разве
main()
не должен возвращать значение, чтобы избежать ужасного проклятия неопределенного поведения? — person Nguyên Khôi; 29.06.2021main()
возвращает0
по умолчанию, если не указано иное (по крайней мере, начиная со стандарта C99). Он работает так же для C++. Это хороший момент, и вы можете легко добавитьreturn 0;
в конце, чтобы сделать поведение по умолчанию явным. Обоснование возврата 0 в качестве значения по умолчанию в C/C++ — person Nguyên Khôi; 29.06.2021