2016-07-01 3 views
2

ли выражение C:Приоритет! * ++ требует скобок?

!(*(++buffer)) 

То же самое, как:

!*++buffer 

?

+1

http://en.cppreference.com/w/cpp/language/operator_precedence – dasblinkenlight

+0

Единственный другой способ размещения сбалансированной круглой скобки вызывает разбиение токенов, что не допускается. –

+0

@Rhymoid tokenization выполняется до того, как ассоциация считается –

ответ

5

Да, они по существу такие же. Здесь приоритет не складывается, потому что выражение однозначно.

Отсылка * зависит от результата ++ и аргумент ! является результатом экспрессии *++buffer. Так что любой другой порядок просто невозможно. (Если вы не верите, постарайтесь поставить скобки (...) таким образом, чтобы результат выражения отличался)

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

+0

предлагают: всегда писать код для удобства чтения и понимания. В общем, это означает использование парнеров, даже если это не совсем необходимо. Примечание: не у всех есть полная таблица приоритетов оператора C, запомненная. – user3629249

1

Скорлупа здесь не требуется.

Согласно operator precedence table, одинарный ++ префикс оператора, унарный оператор indirecton * и унарный логический оператор НЕ ! все имеют одинаковый уровень приоритета, и они связывают справа налево.

Кроме того, поскольку buffer является единственным базовым выражением, содержащимся в более крупном выражении, нет другого способа, чтобы операторы могли совпадать.

+1

В качестве особого случая скобки могут понадобиться, хотя для «+++ i» и подобных запутанных искусственных выражений. IIrc компилятор будет обрабатывать такие, как '++ (+ i)' («max munch»), что дало бы ошибку компилятора, потому что нет значения lvalue для увеличения, тогда как '+ (++ i)' компилируется. – Lundin

2

Если вам нужно спросить, используйте скобки.

Нет смысла беспокоиться и запутывать более поздних программистов. Если вы не уверены, просто используйте скобки - они БЕСПЛАТНО.

+0

Согласовано: читаемость обычно важнее минимальности. –

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