C:关于munmap to struct的警告
我有一个结构:C:关于munmap to struct的警告,c,mmap,C,Mmap,我有一个结构: typedef结构{ uint32长度偏移量; uint32_t tms_偏移量; uint32_t tdi_偏移量; uint32时差偏移量; uint32控制偏移量; }jtag_t; 我用它创建内存映射: volatile jtag\u t*jtag\u mem\u loc=(volatile jtag\u t*)mmap( NULL、kMapSize、PROT_READ | PROT_WRITE、, MAP_SHARED,fd_uio,0); 到目前为止没有问题,直到
typedef结构{
uint32长度偏移量;
uint32_t tms_偏移量;
uint32_t tdi_偏移量;
uint32时差偏移量;
uint32控制偏移量;
}jtag_t;
我用它创建内存映射:
volatile jtag\u t*jtag\u mem\u loc=(volatile jtag\u t*)mmap(
NULL、kMapSize、PROT_READ | PROT_WRITE、,
MAP_SHARED,fd_uio,0);
到目前为止没有问题,直到我munmap
:
if(munmap(jtag_mem_loc,kMapSize)==(fd_t)-1)
perror(“关闭错误:”);
我收到了警告信息
clang -std=c11 ../src/sw/app/xvc_server.c -o ./t
../src/sw/app/xvc_server.c:55:17: warning: passing 'volatile jtag_t *' to parameter of type
'void *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]
if ( munmap(jtag_mem_loc, kMapSize) == (fd_t) -1 )
^~~~~~~~
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/mman.h:247:22: note:
passing argument to parameter here
int munmap(void *, size_t) __DARWIN_ALIAS(munmap);
^
1 warning generated.
我将类型转换为void*
,然后可以解决警告问题
if(munmap((void*)jtag_mem_loc,kMapSize)==(fd_t)-1)
perror(“关闭错误:”);
好吧,把AnyType*
转换成void*
通常是个坏主意。
我有其他解决方案吗?您的强制转换代码是正确且必要的。强制转换为
无效*
没有什么问题。这就是void
指针的作用。好的,我明白了。这个实例让我知道存在从AnyType*
到void*
的正确用法。谢谢