Ответ 1
Версия TL/DR
Да, int typedef INT
соответствует.
Версия Джеймса Мишнера
Синтаксис декларации C (C 2011 онлайн-проект):
6.7 Объявления
Синтаксис
1declaration:
declaration-specifiers init-declarator-listopt ;
static_assert-declaration
declaration-specifiers:
storage-class-specifier declaration-specifiersopt
type-specifier declaration-specifiersopt
type-qualifier declaration-specifiersopt
function-specifier declaration-specifiersopt
alignment-specifier declaration-specifiersopt
...
Это говорит о том, что в одном объявлении вы можете иметь последовательность из одного или нескольких спецификаторов деклараций, где каждый спецификатор объявления может быть спецификатором класса хранения (auto
, extern
, static
, typedef
), спецификатор типа (int
, float
, char
и т.д.), определитель типа (const
, restrict
, volatile
и т.д.), спецификатор функции (inline
), или спецификатор выравнивания.
Порядок, в котором появляются различные спецификаторы, не имеет значения; static const short int x;
может быть записано как int static short const x
или int short const static x
и т.д. На практике большинство людей сначала задают спецификатор класса хранения, затем любые спецификаторы функций или выравнивания (если необходимо), затем квалификаторы любого типа, затем спецификаторы типов, поэтому static const short int x
- это то, как большинство людей напишет это объявление.
Этот синтаксис позволяет нам писать такие типы, как long double
или long long
или unsigned long int
и т.д.
Обратите внимание, что хотя синтаксис допускает произвольные (и сколь угодно длинные) последовательности спецификаторов типов, существует семантическое правило, которое допускает только относительные числа. Вы не можете написать short short short short x
, например, или long long long double y
. Разрешены только следующие последовательности:
Ограничения
2 по меньшей мере один спецификатор типа должен указываться в спецификаторах объявления в каждом объявлении, и в списке спецификаторов-спецификаторов в каждой декларации структуры и имени типа. Каждый список спецификаторы типов должны быть одним из следующих мультимножеств (разделенных запятыми, когда более одного мультимножества на элемент); спецификаторы типов могут встречаться в любом порядке, возможно смешанные с другими спецификаторами декларации.
-void
-char
-signed char
-unsigned char
-short, signed short, short int, or signed short int
-unsigned short, or unsigned short int
-int, signed, or signed int
-unsigned, or unsigned int
-long, signed long, long int, or signed long int
-unsigned long, or unsigned long int
-long long, signed long long, long long int, or
signed long long int
-unsigned long long, or unsigned long long int
-float
-double
-long double
-_Bool
-float _Complex
-double _Complex
-long double _Complex
- спецификатор атомного типа
- конструктор или спецификатор объединения
- спецификатор перечисления
- typedef name
Добавление
Как указывает Кит в комментарии ниже, будущая переработка языка может ограничивать спецификаторы класса хранения до начала декларации, поэтому int typedef INT
может не быть законным в будущем компиляторе.