标签: c gcc standards lvalue
gcc在赋值错误中给出了无效的左值:
-2[(size_t *)new] = 0;
将代码更改为以下内容使其消失:
((size_t *)new)[-2] = 0;
但据我所知,两者在C中都是100%等效的。在非左值表达式中使用前者没有问题。这只是gcc中的一个错误吗?我用几个版本对它进行了测试,得到了相同的结果。
答案 0 :(得分:7)
我很蠢。 []绑定比-更紧密,因此这个表达式实际上是读取索引2并取消它。
[]
-