2013-03-29 59 views
12

Trường hợp sử dụng bộ nhận dạng lớp lưu trữ tự động? Tôi hiểu rằng tất cả các biến cục bộ được tự động theo mặc định. Nhưng whats làm cho sự khác biệt bằng cách viết một cách rõ ràng tự động int a?Sự khác biệt giữa các biến cục bộ auto int a và int a là gì?

+0

Có thể trùng lặp của [Từ khóa tự động C được sử dụng ở đâu?] (Http://stackoverflow.com/questions/2192547/where-is-the- c-auto-keyword-used) –

Trả lời

11

Hoàn toàn không có sự khác biệt.

{ 
    auto int a; 
    /* ... */ 
} 

{ 
    int a; 
    /* ... */ 
} 

là tương đương.

Thông lệ chung là không đặt thông số auto.

+0

Tôi có thể tìm thấy điều này mọi nơi sau đó nó có nghĩa là không có ý nghĩa đặc biệt của từ khóa tự động. – vkesh

+1

@vkesh Điều đó đúng cho C. "' auto' "có nghĩa là" không phải 'tĩnh'", là mặc định. Nó có ảnh hưởng nhiều hơn trong người tiền nhiệm B. http://en.wikipedia.org/wiki/B_(programming_language) –

+0

cảm ơn rất nhiều vì đã chia sẻ liên kết. – vkesh

2

Có hai trường hợp có thể:

  1. auto là mặc định, và thêm một cách rõ ràng từ khóa hoàn thành không có gì
  2. auto không được phép (ví dụ, trên một biến toàn cục) trong trường hợp này thêm auto ngăn chặn mã từ biên soạn
+0

Ý của bạn là do trường hợp thứ hai có thể xảy ra nếu chúng ta thêm tự động vào biến toàn cục, ngăn biến toàn cầu được định nghĩa? Nếu vậy thì usecase nếu bạn biết gì? – vkesh

+1

@vkesh: Tôi đang nói nếu bạn cố gắng chỉ định 'tự động' cho biến toàn cục, mã sẽ không biên dịch (với trình biên dịch hoạt động đúng cách). Theo như "trường hợp sử dụng" là gì, quan điểm của tôi là không có gì. –

+0

cảm ơn rất nhiều vì đã làm rõ. – vkesh

2

Trong ngày hiện tại C (C89, C99, C11), từ khóa auto là không cần thiết. Khác với mục đích làm rõ ràng ("Đây là một biến không tĩnh, và tôi có nghĩa là nó!"), Nó phục vụ không còn bất kỳ mục đích. Đó là một phần còn lại của lịch sử C, được chuyển từ B, nhưng giống như từ khóa entry đã trở nên lỗi thời thực tế.

Tôi đã sử dụng nó một lần trong đời. Đó là mục nhập IOCCC kết hợp với int ngầm định:

drive() { auto motive; ... } 
Các vấn đề liên quan