Насколько я понимаю, причина этого требования в том, что вы можете иметь проверку макросов, например:
#if FRAMEWORKNAME_VERSION >= 123456
// some stuff
#else
// some other stuff
#endif
Числа не обязательно должны быть последовательными, и предложенная вами схема вполне разумна:
#define MAKE_VERSION(MAJOR,MINOR,PATCH) ((MAJOR*10000)+(MINOR*100)+PATCH)
Я бы также предложил, чтобы помимо определения версии вы также определяли константы для каждой версии ...
#define FRAMEWORKNAME_VERSION_1_0_0 MAKE_VERSION(1,0,0)
#define FRAMEWORKNAME_VERSION_1_0_1 MAKE_VERSION(1,0,1)
Таким образом, вы можете проверить несколькими способами ... либо:
#if FRAMEWORKNAME_VERSION >= MAKE_VERSION(1,0,1)
// 1.0.1 and later
#else
// Before 1.0.1
#endif
Или:
#if defined(FRAMEWORKNAME_VERSION_1_0_1)
// 1.0.1 and later
#else
// Before 1.0.1
#endif
Ключевыми требованиями, которые вы должны удовлетворять, являются:
- Числа монотонно растут
- Числа предсказуемы
- Числа легко сравнимы
Если вы хотите предоставить строковое представление вашей версии в дополнение к целочисленному представлению, обязательно продолжайте; однако я настоятельно рекомендую иметь целочисленное представление, поскольку это упрощает сравнение и позволяет проверять версию в препроцессоре.