2011-01-02 24 views
32

thể trùng lặp:
What does “static” mean in a C program?gì bình tĩnh trong ANSI-C

nào từ khóa static có ý nghĩa gì trong C?

Tôi đang sử dụng ANSI-C. Tôi đã thấy trong một số ví dụ mã, họ sử dụng từ khóa static trước các biến và trước các hàm. Mục đích trong trường hợp sử dụng với một biến là gì? Và mục đích trong trường hợp sử dụng với một chức năng là gì?

+0

Tôi đã làm, nhưng khó hiểu mục đích chính xác. Tôi có thể hiểu rất ít về việc sử dụng với các biến. nhưng sử dụng với chức năng? – Sency

+1

bạn có thấy điều này không: http://stackoverflow.com/questions/572547/what-does-static-mean-in-ac-program –

+1

... hoặc điều này: http://stackoverflow.com/questions/943280/ sự khác biệt-giữa-tĩnh-in-c-và-tĩnh-in-c –

Trả lời

57

Cũng giống như một câu trả lời ngắn gọn, có hai cách dùng cho từ khóa static khi xác định các biến:

1- Biến được định nghĩa trong phạm vi tập tin với static từ khóa, tức chức năng bên ngoài được xác định sẽ chỉ hiển thị trong đó tập tin. Bất kỳ nỗ lực nào để truy cập chúng từ các tệp khác sẽ dẫn đến biểu tượng chưa được giải quyết tại thời gian liên kết.

2- Biến được định nghĩa là static bên trong một khối trong một hàm sẽ vẫn tồn tại hoặc "tồn tại" trên các lời gọi khác nhau của cùng một khối mã. Nếu chúng được định nghĩa khởi tạo, thì chúng được khởi tạo chỉ một lần. Biến số static thường được đảm bảo được khởi tạo thành 0 theo mặc định.

+8

Về 1: tĩnh cũng có thể được áp dụng cho các chức năng, cũng che giấu chúng ra bên ngoài. – datenwolf

+6

Nó được nói trong các hiện thân khác của câu hỏi này nhưng đối với những người đến từ Google, nghiêm túc nói 1 áp dụng cho các đơn vị biên dịch không phải tập tin. – Jared

+0

@Roux hass: "Nếu chúng được xác định khởi tạo" Điều đó có nghĩa là gì? Nếu chúng được khởi tạo với giá trị khác 0 khi được xác định? – moonman239

30

static trong cơ thể của hàm, tức là được sử dụng làm bộ phân loại lưu trữ biến làm cho biến đó giữ lại giá trị của nó giữa các cuộc gọi hàm - người ta có thể nói rằng biến tĩnh trong hàm là biến toàn cục chỉ hiển thị với hàm đó . Việc sử dụng static này luôn làm cho chức năng được sử dụng trong chủ đề không an toàn bạn nên tránh nó.

Trường hợp sử dụng khác đang sử dụng static trên phạm vi toàn cầu, nghĩa là các biến và hàm chung: hàm tĩnh và biến toàn cục là cục bộ cho đơn vị biên dịch, nghĩa là chúng không hiển thị trong bảng xuất của nhị phân đã biên dịch vật. Do đó, chúng không gây ô nhiễm không gian tên. Tuyên bố tĩnh tất cả các hàm và các biến toàn cục không thể truy cập từ bên ngoài đơn vị biên dịch (tức là tệp C) đang được đề cập là một ý tưởng hay! Chỉ cần lưu ý rằng các biến tĩnh không được đặt trong các tệp tiêu đề (ngoại trừ các trường hợp đặc biệt rất hiếm).

Các vấn đề liên quan