auto
là một từ khóa C cũ có nghĩa là "phạm vi địa phương". auto a
giống như auto int a
và bởi vì phạm vi cục bộ là mặc định cho một biến được khai báo bên trong hàm, nó cũng giống như int a
trong ví dụ này.
Từ khóa này thực sự là một phần còn lại từ tiền thân B của C, nơi không có loại cơ sở: mọi thứ là int
, con trỏ tới int
, mảng của int
. (*) Tuyên bố sẽ là auto
hoặc extrn
[sic]. C được thừa hưởng "mọi thứ là int
" như một quy tắc mặc định, vì vậy bạn có thể khai báo các số nguyên với
auto a;
extern b;
static c;
ISO C đã loại bỏ điều này, nhưng nhiều trình biên dịch vẫn chấp nhận nó để tương thích ngược. Nếu nó có vẻ lạ lẫm, thì bạn nên nhận ra rằng một quy tắc liên quan đang hoạt động
unsigned d; // actually unsigned int
mà vẫn còn phổ biến trong mã hiện đại.
C ++ 11 đã sử dụng lại từ khóa, mà ít có bất kỳ lập trình viên C ++ nào đang sử dụng với nghĩa gốc, cho kiểu suy luận của nó. Điều này chủ yếu là an toàn vì int
quy tắc "mọi thứ là " từ C đã bị loại bỏ trong C ++ 98; điều duy nhất bị phá vỡ là auto T a
, điều mà không ai đang sử dụng. (Ở đâu đó trong các bài viết của mình về lịch sử của ngôn ngữ , Stroustrup bình luận về điều này, nhưng tôi không thể tìm thấy tài liệu tham khảo chính xác ngay bây giờ.)
(*) Xử lý chuỗi trong B rất thú vị: bạn sẽ sử dụng mảng int
và đóng gói nhiều ký tự trong mỗi thành viên. B thực sự là BCPL với cú pháp khác nhau.
int
đã bị xóa khỏi tiêu chuẩn C vào năm 1999.