Normaal gesproken kent je compiler een aantal paden (libraries) waarin de "standaard" header-files zijn te vinden. stdio.h is er eentje van, deze is standaard aanwezig in C/C++.
In de headerfile stdio.h staan functie-definities, structs, constantes etc welke gebundeld zorgen voor "standard I/O functionaliteit". Voor sommige software heb je die stdio misschien wel helemaal niet nodig, vandaar dat een C/C++ pakket is opgedeeld in vele libraries.
Door het #include-statement weet de compiler dat dit commando moet worden uitgevoerd voordat er wordt gecompileerd, de functies etc uit de headerfile moeten natuurlijk wel bekend zijn voordat de rest kan werken, je noemt dit "preprocessing".
Je kunt ook gewoon eigen headerfiles maken en die includen.