Есть большая программа с кучей версий, где номер версии определен примерно как
#define VER "1.0.1"
Надо написать функцию, тело которой меняеться в зависимости от номера версии,
то есть типа
#if VER == "1.0.1"
....//что-то пишем здесь
#else
....//что-то другое пишем здесь
#endif
Как вы понмаете это не компилируеться, так как сравнивать строки в препроцессоре нельзя.
Вариант присвоения переменной номера версии и последующее сравнение не проходит,
потому что некоторые глобалные переменные и функции появились в поздних версиях программы и при компиляции более ранней версии про эти функции ничего не известно...
Как же написать эту функцию, чтобы один раз вставил ее и все скомпилировалось на всех версиях программы?
А то множество тел функций в разные версии вставлять я уже замучился...
Здравствуйте rsn, Вы писали:
rsn>Есть большая программа с кучей версий, где номер версии определен примерно как rsn>#define VER "1.0.1" rsn>Надо написать функцию, тело которой меняеться в зависимости от номера версии, rsn>то есть типа rsn>#if VER == "1.0.1" rsn>....//что-то пишем здесь rsn>#else rsn>....//что-то другое пишем здесь rsn>#endif
rsn>Как вы понмаете это не компилируеться, так как сравнивать строки в препроцессоре нельзя.
rsn>Вариант присвоения переменной номера версии и последующее сравнение не проходит, rsn>потому что некоторые глобалные переменные и функции появились в поздних версиях программы и при компиляции более ранней версии про эти функции ничего не известно...
rsn>Как же написать эту функцию, чтобы один раз вставил ее и все скомпилировалось на всех версиях программы? rsn>А то множество тел функций в разные версии вставлять я уже замучился...
rsn>Заранее спасибо.
Обычно делают так:
#define _RWSTD_VER 0x020101
AABBCC
| | |
| | +-- CC = Maintenance number
| +---- BB = Minor Release number
+------ AA = Major Release number
Здравствуйте rsn, Вы писали:
rsn>Есть большая программа с кучей версий, где номер версии определен примерно как rsn>#define VER "1.0.1" rsn>Надо написать функцию, тело которой меняеться в зависимости от номера версии, rsn>то есть типа rsn>#if VER == "1.0.1" rsn>....//что-то пишем здесь rsn>#else rsn>....//что-то другое пишем здесь rsn>#endif
rsn>Как вы понмаете это не компилируеться, так как сравнивать строки в препроцессоре нельзя.
rsn>Вариант присвоения переменной номера версии и последующее сравнение не проходит, rsn>потому что некоторые глобалные переменные и функции появились в поздних версиях программы и при компиляции более ранней версии про эти функции ничего не известно...
rsn>Как же написать эту функцию, чтобы один раз вставил ее и все скомпилировалось на всех версиях программы? rsn>А то множество тел функций в разные версии вставлять я уже замучился...
Люди!!! Я знаю как сделать проверку версий с нуля ... Но программа изначально написана не мной, и править ее не с руки.. Как обойтись тем что есть (#define VER "1.0.1")?
Здравствуйте rsn, Вы писали:
rsn>Люди!!! Я знаю как сделать проверку версий с нуля ... Но программа изначально написана не мной, и править ее не с руки.. Как обойтись тем что есть (#define VER "1.0.1")?
Т.е. у тебя есть уже этот макрос. Он определён где-то и ты не хочешь его изменять? А как быть с "большая программа с кучей версий" — как она определяет версии?
Иначе только так
if( strcmp( VER, "1.0.1" ) == 0 )
{
....//что-то пишем здесь
}
else
{
....//что-то другое пишем здесь
}
Здравствуйте rsn, Вы писали:
rsn>Люди!!! Я знаю как сделать проверку версий с нуля ... Но программа изначально написана не мной, и править ее не с руки.. Как обойтись тем что есть (#define VER "1.0.1")?
Но где-то эта строчка с номером версии задается? Может быть, там подправить? Сделать наоборот: не из строки доставать числа, а из чисел создать строку 'VER', чтобы сохранить совместимость со старым кодом.
#define VER1 1
#define VER2 0
#define VER3 1
#define VER_(x) #x
#define VER__(x, y, z) VER_(x) "." VER_(y) "." VER_(z)
#define VER VER__(VER1, VER2, VER3)
#if VER1 == 1 && VER2 == 0 && VER3 == 1
//что-то пишем здесь #else//что-то другое пишем здесь #endif