2013-08-05 4 views
8

В конце this есть объявление extern int (x)[]. Скольчатые скобки что-то делают, или они просто путают?В чем разница между `extern int (x) []` и `extern int x []` в C?

Я предполагаю, что с круглыми скобками x представляет собой массив внешних целых чисел (и это то, что говорится в статье), но без этих x будет внешний массив целых чисел. Если это так, то как будут отличаться определения? Разве они оба не будут int x[]?

+1

«они просто для путаницы» – P0W

+0

Не является ли внешний массив 'int' таким же, как массив внешних 'int'? – alk

+1

Если вы изучаете, как читать декларации C, я чувствую себя обязанным упомянуть [По часовой стрелке/Спиральное правило] (http://c-faq.com/decl/spiral.anderson.html). – ravron

ответ

6

Нет, парнеры там ничего не делают. В статье связывании объясняет, почему:

Самый простой способ дифференцировать два, чтобы посмотреть на размещение из спецификаторов типа. Если спецификатор типа сразу следует за левой скобкой , эта скобка является началом дескриптора функции , и этот тип является частью параметра функции. Пустые круглые скобки также означают функцию. В противном случае круглые скобки состоят из группы (возможно, излишне, но лучше иметь слишком много, чем ).

Также отметим, что «массив внешних Интс» и «внешний массив целых чисел» являются таже вещь - «Экстерн-Несс» всегда идет к объекту, который объявлен, который в данном случае является массивом , Лично я думаю, что первый способ описать это технически неточный и просто запутанный.

+0

Я как раз собирался процитировать этот блок EXACT со страницы. Это очень хороший способ рассказать, что на самом деле означают круглые скобки. :) –

+0

Спасибо, я прочитал этот блок сам, но не мог понять, был ли это лишний случай :) –

+1

@Juris: Я отредактировал ответ, чтобы немного уточнить, что именно является внешним. – Jon

1

В этом случае паратет не имеет значения. Обычно вы используете paranthesis для указателей функций или для обозначения более сильного привязки, так как все операторы имеют другой уровень привязки.
Знаки ключевых слов extern, что это всего лишь объявление, но фактическое определение этого массива произойдет где-то еще.