As your C program grows larger, it becomes essential to organize it into multiple files. This is where C header files come into the picture.
A header file in C is a separate file that contains declarations instead of function implementations. It looks like a regular C file but has a .h
extension instead of .c
.
When you include a header file, you can access the declarations written in that file. For example, when you used the printf()
function, you included the stdio.h
header file using the following preprocessor directive:
#include <stdio.h>
To include your own header files, you use quotes instead of angle brackets. For instance:
#include "myfile.h"
This will look up the myfile.h
file in the current folder. You can also use a folder structure for libraries, like this:
#include "myfolder/myfile.h"
Let’s go through an example to illustrate how header files work. Consider the following program that calculates the number of years since a given year:
#include <stdio.h>
int calculateAge(int year) {
const int CURRENT_YEAR = 2020;
return CURRENT_YEAR - year;
}
int main(void) {
printf("%u", calculateAge(1983));
}
Suppose you want to move the calculateAge
function to a separate file. You would create a calculate_age.c
file with the function implementation:
int calculateAge(int year) {
const int CURRENT_YEAR = 2020;
return CURRENT_YEAR - year;
}
Additionally, create a calculate_age.h
file and include the function prototype, which is the same as the function declaration in the .c
file but without the body:
int calculateAge(int year);
Now, in the main .c
file, you can remove the calculateAge()
function definition and import the calculate_age.h
header file, which will make the calculateAge()
function available:
#include <stdio.h>
#include "calculate_age.h"
int main(void) {
printf("%u", calculateAge(1983));
}
When you compile a program composed of multiple files, remember to list all the files in the command line, like this:
gcc -o main main.c calculate_age.c
For more complex setups, you may need a Makefile to instruct the compiler on how to compile the program.