(*((_SINGARR) _receptive->__m2dimensio + g_curr++)) = (_SINGARR) malloc(sizeof(*((_SINGARR)(_generic)) * g));
上述操作会产生以下编译器警告"赋值从没有强制转换的指针生成整数";
我想它是由sizeof
运算符对类型化的取消引用的void*的评估以某种方式获得的,还是我只是没有相应地取消引用?
_generic
是void*
方法参数
_receptive
-typedef struct*
方法参数用于访问其2D阵列属性(也是伪通用(
扩展指令
_SINGARR char*
当你展开所有的东西时,它看起来像
* (char*) p = (char*) malloc(...);
这意味着,右侧有一个指针(char*)
,左侧有一个字符(*(char*)
,整数类型(。
现在,警告信息变得更加清晰:
赋值从指针(赋值右侧的部分(生成整数(赋值左侧的部分(,而不使用强制转换
不相关,但扩展sizeof(...)
部分将变为sizeof(*((char*)(_generic)) * g)
,这反过来又是sizeof(<some character value> * g)
,这反过来会变成sizeof(<some integer value>)
,这是sizeof(int)
,最后会变为4或8字节,具体取决于您机器的体系结构。