Every program so far has fit in a single file. Real C projects don't. This module covers the tools that let you split code across files and build it reliably, starting with the part of the compiler you have already been using without noticing.
It begins with the preprocessor: #include pulls in other files, #define creates constants and macros, and conditional directives such as #ifdef choose what gets compiled. It then shows how to organize code into header files and source files, with include guards to prevent double inclusion, and ends with make, which rebuilds only what has changed.
Watch the lessons in order, then continue on to Debugging, Testing & Concurrency.
A beginner's guide to the preprocessor, covering #include, #define, #ifdef, and #ifndef.
Programiz's lesson on the preprocessor and macros, which you have been using every time you write #include.
How to split your code into .c and .h files, use header files to share functions across files, and compile a multi-file program.
A tutorial on modularizing a C program: why to split it into many files, what a module is made of, defining a .h header file, include guards, and incremental compilation.
A video on the basics of how make works. Once you understand this, the rest of Makefiles is much easier to follow.
An introduction to the make build system, going over the fundamental make commands using C or C++.