ISO C11 tiêu chuẩn quốc gia trong 6.2.5 Types
:
Có năm loại nguyên ký tiêu chuẩn, định là char ký, ngắn int, int, int dài, và int lâu dài.
Đối với mỗi loại số nguyên đã ký, có loại số nguyên không tương ứng (nhưng khác) được chỉ định bằng từ khóa unsigned) sử dụng cùng một lượng bộ nhớ (bao gồm thông tin ký) và có cùng yêu cầu căn chỉnh .
Tuy nhiên không có nhiệm vụ trong phần đó như đến trật tự trong đó các loại cơ sở và unsigned
modifier xuất hiện.
Phần kiểm soát là sau này trong tiêu chuẩn, 6.7.2 Type specifiers
, diễn giải ở đây:
Loại specifiers là void
, char
, short
, int
, long
, float
, double
, signed
, unsigned
, _Bool
, _Complex
, <struct-or-union-specifier>
, <enum-specifier>
và <typedef-name>
.
Ít nhất một trình chỉ định loại phải được đưa ra trong các trình khai báo khai báo trong mỗi khai báo và trong danh sách trình định danh định danh trong mỗi khai báo cấu trúc và tên loại. Mỗi danh sách các kiểu chỉ định sẽ là một trong các multiset sau đây (được phân định bằng dấu phẩy, khi có nhiều hơn một multiset cho mỗi mục); các kiểu chỉ định có thể xảy ra theo bất kỳ thứ tự nào, có thể xen kẽ với các bộ khai báo khác.
Sau đó, nó sẽ liệt kê tất cả các multisets, chẳng hạn như unsigned long, or unsigned long int
.
Nhưng cụm từ quan trọng có the type specifiers may occur in any order
, có nghĩa là tất cả trong số này là hợp lệ cho MultiSet rằng:
unsigned long
long unsigned
unsigned long int
unsigned int long
long unsigned int
long int unsigned
int unsigned long
int long unsigned
Đừng làm điều này ở nhà. –
Đối với một ví dụ tối nghĩa hơn, lưu ý rằng 'typedef int i;' và 'int typedef i;' là tương đương. – Mankarse
@Mankarse, điểm tốt, 6.7 cho phép bạn sắp xếp lại các thông số lớp lưu trữ như 'typedef' và gõ specifiers như' int'. Tôi sẽ phải nhìn hai lần nếu tôi từng thấy 'int typedef something' trong tự nhiên. Tôi gần như chắc chắn theo dõi và tiêu diệt bất cứ ai sử dụng 'i' như một tên loại :-) – paxdiablo