Внутри реализации библиотеки объявите переменные следующим образом:
struct my_lib_variables
{
int var1;
char var2;
};
Теперь в заголовке для конечных пользователей, объявите это так:
struct my_lib_variables;
Он объявляет структуру как неполный тип . Люди, которые будут использовать заголовок, смогут создать указатель на структуру, но это все. Цель состоит в том, чтобы они написали что-то вроде этого:
#include "my_lib.h"
struct my_lib_variables* p = my_lib_init();
my_lib_do_something(p);
my_lib_destroy(p);
Код libray может изменять переменные, но библиотека не может сделать это напрямую.
Или вы можете использовать глобальные переменные, но поместите объявления extern
в заголовок, который не будет использоваться конечным пользователем.