Я не уверен, что рекомендую, но ...
Заголовок может содержать:
#define LIB_VERSION_SUFFIX _3_17
#define LIB_PASTER(x, y) x ## y
#define LIB_EVALUATOR(x, y) LIB_PASTER(x, y)
#define LIB_FUNCTION(x) LIB_EVALUATOR(x, LIB_VERSION_SUFFIX)
#define lib_functionA LIB_FUNCTION(lib_functionA)
extern int lib_functionA(const char *, int);
Etc.
Пользователь кода пишет в терминах имен недокорированных функций (lib_functionA), а заголовок обеспечивает добавление правильного суффикса версии.
Вам не обязательно изменять каждую функцию; вам нужно убедиться, что какая-то функция, которая будет всегда использоваться, украшена номером версии. Если есть функция инициализации (возможно, lib_init()
), используйте ее. Вы можете сделать это с переменной; трудная часть заключается в обеспечении ссылки на переменную в каждой программе.
Обратите внимание, что более обычным является обеспечение того, чтобы интерфейс к библиотеке оставался неизменным в разных версиях, чтобы программы могли быть связаны с любой версией без необходимости компиляции.