В чем разница между stati c const int и stati c int const? - PullRequest
1 голос
/ 27 февраля 2020

В этом ответе используется ОП:

static int const var = 5;

в контексте управления условной компиляцией.


Есть ли разница между использованием static const int и static int const?

Как например:

static const int var;

против

static int const var;

Я не знаю технику, чтобы подразумевать тип в посередине между static и const. Есть ли разница?

1 Ответ

2 голосов
/ 27 февраля 2020

Грамматика для спецификаторов объявлений приведена в C 2018 6.7 1, и она показывает, что спецификаторы для класса хранения (например, static), типа (например, short или double), квалификаторов (например, как const), функции (inline и _Noreturn) и выравнивание могут отображаться в любом порядке. Ничто в пункте 6.7 не дает никакого значения порядку, в котором появляются спецификаторы, поэтому мы можем предположить, что любая комбинация спецификаторов имеет одинаковое значение независимо от порядка.

Единственное упоминание «порядка» в этом отношении встречается в 6.7.2 2, где говорится: «… спецификаторы типа могут встречаться в любом порядке, возможно, смешанными с другими спецификаторами объявления». Таким образом, вы можете написать long static int const long для static const long long int, точно так же, как вы можете сказать «квадратный красный большой дом» вместо «большой квадратный красный дом» - нет никаких правил против этого, но это будет показаться смешным людям и может их скинуть.

Обратите внимание, что *, который указывает указатель, а также ( и ) для групп или списков аргументов и [ и ] для индексы не являются спецификаторами декларации и не могут быть свободно переупорядочены с помощью спецификаторов декларации. (На самом деле они являются частью декларатора , который является отдельной частью декларации от спецификаторов объявлений .)

...