Quite a few projects hardcode metadata in a file (or C/C++ headers), e.g. version.h with version info or defines. This can cause small problems when developers forget to update the version information inside these files. It is a lot easier to keep track of version information if your project uses git and makes use of tagging.
This is one possible versioning scheme used for C/C++ releases. It depends on Make, a build automation tool, but the idea can be easily extended to other build tools such as CMake.