/ / Evite transmitir de estática volátil uint8_t para uint8_t em chamadas de função? - c, argumentos voláteis

Evite transmitir de estática volátil uint8_t para uint8_t em chamadas de função? - c, argumentos voláteis

Atualmente tenho este código:

static void func( uint8_t var );

static volatile uint8_t foo;

int main() {
/* Here we have to cast to uint8_t */
func( (uint8_t) foo );

/* This will not compile */
func( foo );
}

Existe uma maneira de evitar a conversão na chamada de função?

Respostas:

4 para resposta № 1

Eu acho que você está tentando passar um ponteiro para ovariável e, ao editar sua pergunta, você removeu a declaração do ponteiro para simplificar, mas isso também mudou sua pergunta. Se você está passando um valor para a função, não há nenhum problema.

Agora, se você estiver passando um ponteiro, o volátilO modificador informa que o compilador deve esperar que o valor da variável seja alterado por outros meios que não o código compilado. Você realmente não deve passar uma variável volátil como parâmetro não volátil para uma função. A função em si deve ser alterada para ter o parâmetro volátil e recompilada. Em seguida, a função (com parâmetro volátil) é preparada para lidar com uma variável volátil.


0 para resposta № 2

Você não precisa converter explicitamente. O segundo formulário é completamente válido para qualquer compilador C compatível com padrões.

É apenas algo assim onde você precisaria transmitir:

static void func( uint8_t *var );

static volatile uint8_t foo;

int main() {
/* Here we have to cast to uint8_t */
func( (uint8_t*) &foo );

/* This will not compile */
func( &foo );
}

0 para resposta № 3
#include <stdint.h>

static void func( uint8_t var ){}

static volatile uint8_t foo;

int main() {
/* Here we have to cast to uint8_t */
func( (uint8_t) foo );

/* This will not compile */
func( foo );
}

Isso compila para mim usando o gcc. (tive que realmente definir a função e incluir o arquivo de cabeçalho.)