Ответ 1
Если вы внимательно прочитали правильные биты стандарта, вы обнаружите, что объявление монстра в вопросе действительно, даже если это неправдоподобно.
"Правильные биты" включают в себя:
6.2.5 Типы
Существует пять стандартных стандартных целочисленных типов, обозначенных как
signed char
,short int
,int
,long int
иlong long int
. (Эти и другие типы могут быть обозначенный несколькими дополнительными способами, как описано в 6.7.2.)...
Для каждого из знаковых целочисленных типов существует соответствующая (но другая) неподписанная целочисленный тип (обозначается ключевым словом
unsigned
), который использует ту же сумму (включая информацию о знаках) и имеет те же требования к выравниванию.6.7.2 Спецификаторы типов
В спецификаторах объявлений в каждом объявлении указывается хотя бы один спецификатор типа, и в списке спецификаторов-спецификаторов в каждой декларации структуры и имени типа. Каждый список спецификаторы типов должны быть одним из следующих мультимножеств (разделенных запятыми, когда более одного мультимножества на элемент); спецификаторы типов могут встречаться в любом порядке, возможно смешанные с другими спецификаторами декларации.
...
long long
,signed long long
,long long int
илиsigned long long int
unsigned long long
илиunsigned long long int
Другие спецификаторы декларации включают классы хранения (static
и _Thread_local
в примере) и типы классификаторов (volatile
и _Atomic
).
6.7 Объявления
6.7 Объявления
Синтаксис
Объявление:
объявления-спецификаторы init-declarator-listopt;
static_assert-declarationдекларирование спецификаторы:
хранения класса спецификатор
декларация спецификаторы <суб > неавтоматическогосуб >
спецификаторы спецификации спецификатора типа opt
спецификаторы объявления-спецификатора типа opt
спецификатор спецификации спецификатора спецификации opt
спецификаторы-указатели выравнивания-спецификаций opt
Кроме того, как отмечено Olaf в comment:
6.11.5 Спецификаторы класса хранения
Размещение спецификатора класса хранения, отличного от начала декларации спецификаторы в декларации являются устаревшей функцией.
Также эксцентрично разделить ключевые слова целочисленного типа (спецификатор типа). Более ортодоксальной версией декларации будет:
static _Thread_local _Atomic const volatile unsigned long long int x = 10;
(или он может потерять int
).