В нескольких файловых программах и включении, как определения функций включаются в основную программу?
Если у меня есть заголовочный файл List.h
который содержит прототипы функций, связанных со списком, определения функций находятся в исходном файле (файл c) List.c
, И то и другое List.c
файл и main.c
файл (или любой исходный файл, представляющий основную программу) включает в себя List.h
файл. Теперь основная программа имеет прототипы функций списка, но как определения функций включаются в основную программу, в то время как для включения нет List.c
подать в main.c
файл? Дело не в том, что List.h
а также List.c
файлы имеют одинаковые имена.
Я работаю на Windows и использую MS Visual Studio.
2 ответа
Для вашего сценария вы компилируете List.c
в List.o
(или, может быть List.obj
если вы работаете на Windows), и вы компилируете main.c
в main.o
, Затем вы снова запускаете компилятор, чтобы связать два объектных файла вместе с любыми другими необходимыми библиотеками.
Если вы используете GCC (компилятор GNU C из коллекции компиляторов GNU), то вы можете использовать:
gcc -Wall -Werror -std=c11 -c List.c
gcc -Wall -Werror -std=c11 -c main.c
gcc -Wall -Werror -std=c11 -o program main.o list.o
Если вам нужно указать библиотеки, вы добавите их после объектных файлов.
Вы, вероятно, автоматизировать все это с makefile
, тоже.
Они составляются отдельно. После компиляции большинство компиляторов генерируют объектные файлы, содержащие исполняемый код, перемещение, символьную информацию, отладку и некоторую другую информацию. Эти объектные файлы затем "объединяются" вместе программой компоновщика, которая использует информацию из объектных файлов для создания правильного исполняемого файла.
Это, конечно, очень упрощенное описание, и если вы хотите узнать больше, вы должны узнать об этом больше в Интернете.