Tenho uma função que aceita um ponteiro mas não modifica os dados apontados, mas retorna o mesmo ponteiro ou uma derivada dele. Eu poderia fazer o ponteiro const
:
const void *some_read_only_operation(const void *ptr) {
// Do work with ptr
return ptr;
}
Porém, isso significa que se eu chamar a função, não poderei manipular o resultado sem conversão, mesmo que o ponteiro que passei não fosse const
. Pelo contrário, se eu fizer os ponteiros e retornar o tipo na função non const
então precisarei de um cast para passar qualquer ponteiro para a função que é const
. E receberei um const
ponteiro de volta, então quebrei const
a segurança.
Existe alguma maneira de criar uma função em C que respeite const
a correção ( const
entrada significa const
saída e não const
entrada significa não const
saída) sem ter que escrever 2 funções separadas? Se não, quão perto posso chegar?
Nota: Este parece ser o tipo de pergunta que provavelmente já foi feita antes. Tentei procurar duplicatas usando palavras-chave como retorno de função const ou função de preservação de qualificador , mas não consegui encontrar nenhuma.
Você pode usar
_Generic
para isso:Você pode retornar um deslocamento em vez de um ponteiro:
Você pode usar outras unidades além
char
do deslocamento, se isso for adequado para sua aplicação.