标准说:
(6.7.3)如果尝试修改对象 通过使用左值使用const限定类型定义 非const限定类型,行为未定义。
在未定义的行为部分:
尝试修改使用的对象 通过使用左值的const限定类型 非const限定类型(6.7.3)
malloc 的返回值是未初始化存储空间的块。在该存储中没有构建对象。
那就是说下面的代码是合法的吗?
#include
#include
typedef struct {
unsigned char h;
const unsigned int v;
} liber_primus;
int main(int argc, const char **argv)
{
unsigned int lykilord;
if (!(argc - 1))
return 0;
liber_primus *runaljod = malloc(sizeof (*runaljod));
if (!runaljod)
abort();
runaljod->h = *(unsigned char *)argv[1];
*(unsigned int *)&runaljod->v = 3307U;
lykilord = runaljod->h * runaljod->v;
free(runaljod);
return lykilord;
}