Синтаксис для разыменования указателя в C (или С++)

У меня была проверка коллег в коде, подобном этому в C (синтаксиС# 1):

(*(*(*p_member).p_member).p_member).member

Когда я спросил его, почему он не использовал → (синтаксис №2):

p_member->p_member->p_member->member

он действительно защитил, заявив, что синтаксис №2 более сложный, чем # 1... Я закончил тем, что изменил его код, потому что мне пришлось его модифицировать и не мог его прочитать, а затем он рассердился, что я действительно коснулся его...

Какой синтаксис предпочитает сообщество SO? Оба действительны, но я нахожу синтаксис №2 более удобочитаемым.

Я устанавливаю это в wiki сообщества из-за того, что вопрос субъективен.

Ответ 1

Технический термин для синтаксиса № 1 - "орехи".

Тем не менее, я бы немного беспокоился о коде, который тоже должен коснуться 3 раза.

Ответ 2

Я думаю, что ваш коллега либо неопытен, что-то вроде неофоба, либо просто незнакомец. Вы обнаружите, что единодушным выбором является использование синтаксиса → .

Ответ 3

В С++ я бы определенно использовал → , потому что → может быть перегружен.

В C я бы использовал → , а потому, потому что это намного легче читать, быстрее печатать и меньше подвергать ошибкам (надеюсь, что ваш коллега не потеряется в скобках!).

Ответ 4

Я печатаю здесь манжету, но мое воспоминание состоит в том, что логика самого существования оператора -> в C была объяснена в 1-м издании K & R as (перефразирование): d необходимо ввести (*p).a из-за необходимого приоритета операторов * и ..

Не использовать -> по своему назначению - гайки.

Ответ 5

Я возьму дверь №2, Монти! Конечно, его сложнее напечатать, но его более понятно, чем выяснить, какие операторы разыгрывают этот указатель.

Ответ 6

Вы также можете обсудить понятие "владение кодом" в своей команде. Вы, коллега, не "владеете" кодом, это делает компания. Следовательно, любой, кто работает в компании, по уважительной причине, может ее редактировать.

Ответ 7

субъективный ха?

Я тоже возьму # 2!

Ответ 8

Второй вариант, очевидно, выглядит яснее. Единственная причина, чтобы предпочесть # 1, - это случай перегрузки какой-то странной операции * и оператора → , когда # 1 имеет действительно отличный эффект, чем # 2.

Ответ 9

Плохой коллега. Измените коллегу.

Ответ 10

У меня были впечатления, где "- > " не было правильно реализовано в нескольких компиляторах... так что нормальная (* p).a с большей вероятностью работала, когда у вас несколько уровней вложенности.

Ответ 11

Нет 2.

Сказав это, не обижай людей, изменив их код, особенно если это вопрос стиля. Это просто не стоит.