As it is shown in one of the Learn C++ © lessons (it isn’t exact copy;
// means comments):
// something.cpp -- source file
// definitions (and declarations? I'm forget)
// void: function doesn't return anything to the caller
// a: name of the function
// (): function doesn't accept arguments == function has no parameters
// call to b()
// just to simplify
Trouble is: Compilers make their job line by line. a() should know what b() is before calling it. Same goes for b(). To not … play with all of such things (and place functions somewhere inside of sources “between this and that”), and to provide other advantages, the header files were invented:
// something.h -- header file
// Header guard. I'd forget how to do this.
// declarations (not definitions!)
// compiler will be unaware about the implementation,
// but it wll be aware of this functions "ins" and "outs"
// something.cpp -- sources file, again
/* use it as "forward declaration"
* to make the compiler know what a(), b() and such is.
Summary: If your’d modified a() or b()'s implementation, but neither their return types, nor their parameters, there is no need to update the header file.
// something.cpp -- again: source file
// update !
void a(char c, int d)
// no update...
PS: Linux written in C, not in C++.