В чем разница между `extern int (x)[]` и `extern int x[]` в C?
Есть декларация extern int (x)[]
в конце этой статьи. Скобки делают что-нибудь или они просто для путаницы?
Я думаю, что это с круглыми скобками x
это массив внешних целых чисел (и это то, что говорится в статье), но без тех x
будет внешний массив целых чисел. Если это правда, как будут отличаться определения? Разве они оба не будут int x[]
?
2 ответа
Нет, парни не делают там ничего. Статья, на которую вы ссылаетесь, объясняет, почему:
Самый простой способ их различения - посмотреть на расположение спецификаторов типов. Если спецификатор типа сразу следует за левой скобкой, эта скобка является началом дескриптора функции, а тип является частью параметра функции. Пустые скобки также обозначают функцию. В противном случае скобки группируют (возможно, излишне, но лучше иметь слишком много, чем слишком мало) выражения.
Также обратите внимание, что "массив внешних целочисленных значений" и "внешний массив целочисленных значений" - это одно и то же: "внешность" всегда идет к объявленному объекту, который в данном случае является массивом. Лично я думаю, что первый способ описать это технически неточно и просто сбить с толку.
Парантез не имеет значения в этом случае. Обычно вы используете парантез либо для указателей на функции, либо для обозначения более сильной привязки, поскольку все операторы имеют разный уровень привязки.extern
Ключевое слово отмечает, что это просто декларация, но фактическое определение этого массива произойдет где-то еще.