2010-12-07 2 views
2

НКУ дает мне неверную именующее выражение в ошибки присваивания для:gcc confused о том, что такое lvalue?

-2[(size_t *)new] = 0; 

Изменение кода к следующему делает его уйти:

((size_t *)new)[-2] = 0; 

, но, насколько я могу судить, как это 100% эквивалент в C. gcc не имеет проблемы с использованием первого в выражениях, отличных от lvalue. Это просто ошибка в gcc? Я протестировал его с несколькими версиями и получил те же результаты.

+1

каждый раз, когда я думаю, что знаю C, я вижу такие вещи и иду «wtf?» – 2010-12-07 15:42:35

+0

Я знал, что можно получить доступ к таким массивам, но я никогда не знал, что кто-то действительно делает это так ... – musiKk 2010-12-07 15:47:36

ответ

7

Я глуп. [] связывается более плотно, чем -, поэтому это выражение действительно считывает индекс 2 и отрицает его.

Смежные вопросы