Люди, пришедшие из других сред, всегда полагают, что с файлами .c, .m и .h, используемыми в программировании на C и Objective-C, происходит нечто сложное.
На самом деле, это очень, ОЧЕНЬ просто.
В целях создания проекта интегрированные среды разработки, такие как XCode, игнорируют все файлы .h. Что они делают, так это берут каждый файл .c и .m и компилируют его. Если программист (то есть вы) использовал какие-либо директивы #include или #import, компилятор вставляет весь текст включенного / импортированного файла .h, где директива была.
Итак, если у вас есть файл .h - insert.h - там написано:
in
И файл .c, который сказал:
Alice
#include "insert.h"
Wonderland
Компилятор, после обработки директив #include & #import, увидит это:
Alice
in
Wonderland
Именно это ОЧЕНЬ простое поведение слияния файлов мы используем для создания сложных программ:)
.h - это просто соглашение, согласно которому программисты могут сообщать друг другу, что файл подходит для объединения - возможно, несколько раз - с использованием #include или # import.
.c и .m файлы не объединяются таким образом. Каждый файл .c и .m компилируется отдельно - для создания файлов .o. Каждый файл .o представляет собой набор скомпилированных функций. Затем файлы .o объединяются - или «связываются» - для создания окончательной программы.
Шаг связывания гарантирует, что каждая функция существует только один раз, и что все вызываемые функции действительно где-то существуют.
C & Objctive-C определяет одну специальную функцию, которая должна где-то существовать - main()
. Опять же, язык очень расслаблен - ему все равно, в каком файле .c или .m находится функция main()
. Просто, что она где-то существует в каком-то файле.