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 № 1Eu 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.)