Сам компилятор не заботится о том, какой файл содержит какие функции; main()
не является особенным. Однако на этапе связывания все эти символы из разных файлов (и блоков компиляции, возможно) совпадают. У компоновщика есть скрытый «шаблон», который имеет код на фиксированном адресе, который ОС всегда будет вызывать при запуске программы. Этот код вызовет ваш номер main
; следовательно, компоновщик ищет main
во всех файлах. Если его нет, вы получите неразрешенную ошибку символа, точно так же, как если бы вы использовали функцию, которую вы забыли реализовать.
То же, что и для любой другой функции, относится к main
: имеется только один; имея два main
в двух файлах, которые связаны друг с другом, вы получаете ошибку компоновщика, потому что компоновщик не может решить, какой из них использовать.
Читайте о фазах компилятора, и вы получите ответ. – haccks
Это не так. [enuf characters для этого комментария] –
Компилятор не заботится о главной функции и будет компилировать весь блок компиляции. Более поздний компоновщик свяжет их и может удалить несвязанные функции. –