What is the difference between stdint.h and inttypes.h?
If none of them is used, uint64_t is not recognized but with either of them it is a defined type.
See the wikipedia article for inttypes.h.
Use stdint.h for a minimal set of definitions; use inttypes.h if you also need portable support for these in printf, scanf, et al.