Fazer variáveis do módulo C acessíveis como somente leitura

Gostaria de dar a uma variável de módulo um acesso somente leitura para os módulos do cliente. Várias soluções:

1. O mais comum:

// module_a.c
static int a;

int get_a(void)
{
    return a;
}

// module_a.h
int get_a(void);

@This cria uma função por variável a ser compartilhada, uma chamada de função (estou pensando em tempo de execução e legibilidade) e uma cópia para cada leitura. Supondo que nenhum vinculador de otimização.

2. Outra solução:

// module_a.c
static int _a;
const int * const a = &_a;

// module_a.h
extern const int * const a;

// client_module.c
int read_variable = *a;
*a = 5;  // error: variable is read-only

Gosto disso, além do fato de o cliente precisar ler o conteúdo de um ponteiro. Além disso, toda variável somente leitura precisa de seuextern const ponteiro paraconst.

3. Uma terceira solução, inspirada na segunda, é ocultar as variáveis por trás de uma estrutura e um ponteiro externo para a estrutura. A notaçãomodule_name->a é mais legível no módulo cliente, na minha opinião.

4. Eu poderia criar uminline definition para oget_a(void) função. Ainda pareceria uma chamada de função no módulo cliente, mas a otimização deve ocorre

Minhas perguntas

Existe a melhor maneira de tornar variáveis modificadas em um módulo acessíveis como somente leitura em outros módulos? Melhor em que aspecto?

Quais soluções acima você aceitaria ou recusaria usar e por quê?

Estou ciente de que isso é microoptimização - talvez eu não a implemente -, mas ainda estou interessado na possibilidade e, acima de tudo, no conheciment

questionAnswers(3)

yourAnswerToTheQuestion