Zu stdint.h vs. cstdint:
Da es Headerdateien sind, werden die nicht an sich compiliert, sondern nur in dem Moment, wo sie von irgendwas eingebunden werden. Der Unterschied ist hier, das stdint.h erstmal zur C-Standardbibliothek gehört. In pre-Standard-C++ hat man die einfach übernommen, dementsprechend auch Header wie stdint.h eingebunden. Aktuelles Standard-C++ verwendet zwar immer noch die C-Standardbibliothek als Teil der größeren C++-Standardbibliothek, aber weil in C++ Standardbibliotheksheader keine Endung haben, hat man stdint.h und co. in cstdint etc. umbenannt.
Die meisten Compiler erlauben aber immer noch, diese Header unter "falschem" Namen einzubinden, genau wie z.B. auch iostream.h statt einfach nur iostream. Oder zumindest war das mal so.