2014-10-13 18 views
6

Điều nào là "phù hợp" khi viết mô-đun hạt nhân linux: Sử dụng static const để xác định hằng số hoặc #define?Hạt nhân Linux: Static Const vs #Define

Tôi có một mô-đun hạt nhân liên quan đến một phần cứng và tôi có một hằng số điển hình là số lượng bộ đệm. Thay vì mã cứng "3" ở khắp mọi nơi, tôi muốn sử dụng một hằng số. C phong cách thường khuyên bạn nên dùng static const, nhưng tôi nhận thấy hạt nhân là chock đầy đủ của #define 's khắp nơi. Có lý do gì không?

+1

http://stackoverflow.com/questions/1674032/static-const-vs-define-in-c –

+0

Vâng, tôi đã đọc .. Tôi chỉ tự hỏi liệu có những tác động nào khác khi làm việc trong Không gian hạt nhân thay đổi một chút câu trả lời. – Yeraze

+1

Theo quy ước của dự án bạn đang làm việc. Vì linux đã sử dụng #define cho mặt nạ phần cứng/thanh ghi/giá trị, hãy sử dụng cùng một quy ước. – nos

Trả lời

3

Nó được sử dụng để được rằng bạn không thể làm được:

const size_t buffer_size = 1024; 
unsigned char buffer[buffer_size]; 

trong C, vì buffer_size không phải là một "thực" liên tục. Do đó, bạn thường thấy các thay đổi là

#define BUFFER_SIZE 1024 
unsigned char buffer[BUFFER_SIZE]; 

.

Kể từ C99, bạn có thể thực hiện trước đây, nhưng không phải là trong phạm vi toàn cầu. Nó sẽ không hoạt động bên ngoài chức năng (thậm chí không được thực hiện static). Vì nhiều mã trong hạt nhân giao dịch với các cấu trúc tương tự, có thể là một lý do để sử dụng bộ tiền xử lý thay thế.

Lưu ý: đừng quên về sizeof, đó là một công cụ rất tốt khi nói đến việc không lặp lại kích thước liên tục trên toàn bộ địa điểm, bất kể cách thực hiện hằng số.

+0

Vâng, tôi biết sizeof .. Thật không may, hằng số này được xác định bởi các yêu cầu phần cứng bên ngoài, và phải được biết trước-a (tôi không thể truy vấn cho con số này, nó chỉ phải được biết là 3). – Yeraze

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