Я думаю, что это ошибка компоновщика, а не ошибки компилятора; он пытается сказать вам, что вы не предоставили все функции, необходимые для создания полной программы.
Вам нужно скомпилировать программу так:
gcc -o printhello Main.c printhello.c
Предполагается, что ваш файл Main.c
выглядит примерно так:
#include "printhello.h"
int main(void)
{
print_hello();
return 0;
}
и что ваш файл printhello.c
выглядит примерно так:
#include "printhello.h"
#include <stdio.h>
void print_hello(void)
{
puts("Hello World");
}
Ваша декларация в printhello.h
должна быть:
void print_hello(void);
Это явно говорит о том, что функция не принимает параметров. Объявление с пустыми скобками означает «есть функция print_hello()
, которая не возвращает значения и принимает неопределенный (но не переменный) список аргументов», что совершенно иное. В частности, вы можете вызвать print_hello()
с любым количеством аргументов, и компилятор не сможет отклонить программу.
Обратите внимание, что C ++ обрабатывает пустой список аргументов так же, как void print_hello(void);
(поэтому он гарантирует, что вызовы print_hello()
не содержат аргументов), но C ++ не совпадает с C.