avr-gcc 警告:从不兼容的指针类型初始化
avr-gcc warning: initialization from incompatible pointer type
我不确定如何修复这段代码的警告(警告与第二行有关)。
这不是我的代码,但它确实可以正常工作。但是,我想摆脱警告但感到困惑。
v 是一个无符号长整数,我们要将其放入指针。我们正在使用 avr-gcc。
../../uJ/uj.c:1149:20: warning: initialization from incompatible pointer type
const UInt8* d = &v;
static void ujThreadPrvPut32(UInt8* ptr, UInt32 v){ //to pointer
const UInt8* d = &v;
*ptr++ = *d++;
*ptr++ = *d++;
*ptr++ = *d++;
*ptr = *d;
}
添加演员:
const UInt8* d = (const UInt8*)&v;
作为对其他答案的补充:
首先将 ptr
参数作为常量指针提供是 better practice。
static void ujThreadPrvPut32(UInt8* const ptr, UInt32 v);
由于 ptr
提供了数据应该去的目标地址,这不应该被函数改变,只有那个位置的内容。
另一方面,您可以只使用 memcpy()。
uint8_t* ptr = 0; // has to be set to desired target address obviously
uint32_t value = 123;
memcpy(ptr, &value, sizeof(value));
我不确定如何修复这段代码的警告(警告与第二行有关)。 这不是我的代码,但它确实可以正常工作。但是,我想摆脱警告但感到困惑。 v 是一个无符号长整数,我们要将其放入指针。我们正在使用 avr-gcc。
../../uJ/uj.c:1149:20: warning: initialization from incompatible pointer type const UInt8* d = &v;
static void ujThreadPrvPut32(UInt8* ptr, UInt32 v){ //to pointer
const UInt8* d = &v;
*ptr++ = *d++;
*ptr++ = *d++;
*ptr++ = *d++;
*ptr = *d;
}
添加演员:
const UInt8* d = (const UInt8*)&v;
作为对其他答案的补充:
首先将 ptr
参数作为常量指针提供是 better practice。
static void ujThreadPrvPut32(UInt8* const ptr, UInt32 v);
由于 ptr
提供了数据应该去的目标地址,这不应该被函数改变,只有那个位置的内容。
另一方面,您可以只使用 memcpy()。
uint8_t* ptr = 0; // has to be set to desired target address obviously
uint32_t value = 123;
memcpy(ptr, &value, sizeof(value));