Обычно вы определяете прототип функции в заголовочном файле, защищенном с помощью включаемых защит:
//module.h
#ifndef MODULE_H //include guard begin
#define MODULE_H
struct foobar{
void *a_field;
};
void prototype(void);
#endif //include guard end
Включающие защитные устройства предотвращают некоторые конфликты, в том числе когда разные файлы должны включать один и тот же заголовок.Они гарантируют, что он будет включен только один раз.
Затем вы можете включить этот заголовок в файл с расширением c, который реализует определенные прототипы:
//module.c
#include "module.h"
void prototype(void){
//implement prototype function
struct foobar f;
}
Обычно с каждым файлом заголовка связан файл ac.(это не обязательно; это соглашение).Если вам нужно только определить структуру, вам может даже не понадобиться файл C, связанный с заголовком.Если у вас также есть несколько прототипов функций для реализации, это хороший способ упорядочить ваш код.
Затем включите заголовочный файл во все остальные файлы, для которых нужны определенные функции или структуры:
//otherfile.c
#include "module.h"
struct foobar f;
prototype(); //you can now call prototype function from this file
Теперь возможно скомпилировать и связать вместе оба файла (prototype.c, otherfile.c)