В нескольких файловых программах и включении, как определения функций включаются в основную программу?

Если у меня есть заголовочный файл 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, тоже.

Они составляются отдельно. После компиляции большинство компиляторов генерируют объектные файлы, содержащие исполняемый код, перемещение, символьную информацию, отладку и некоторую другую информацию. Эти объектные файлы затем "объединяются" вместе программой компоновщика, которая использует информацию из объектных файлов для создания правильного исполняемого файла.

Это, конечно, очень упрощенное описание, и если вы хотите узнать больше, вы должны узнать об этом больше в Интернете.

Другие вопросы по тегам