2014-10-13 11 views
6

Co jest bardziej "stosowne" przy pisaniu modułu jądra Linux: Użycie static const do zdefiniowania stałej lub #define?Kernel systemu Linux: Statyczny const kontra #Define

Mam moduł jądra związany z elementem sprzętu i mam typową stałą, która jest liczbą buforów. Zamiast twardego kodu "3" wszędzie, chcę użyć stałej. Styl C zwykle zaleca przyjmowanie static const, ale zauważam, że Kernel jest pełen #define w każdym miejscu. Czy jest powód?

+1

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

+0

Tak, przeczytałem, że ... Zastanawiam się, czy istnieją inne implikacje podczas pracy w Przestrzeń jądra, która nieznacznie zmienia odpowiedzi. – Yeraze

+1

Postępuj zgodnie z konwencją projektu, nad którym pracujesz. Ponieważ Linux używa już #define dla masek/rejestrów/wartości sprzętowych, użyj tej samej konwencji. – nos

Odpowiedz

3

Kiedyś było tak, że nie można zrobić:

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

w C, ponieważ buffer_size nie jest „prawdziwy” stała. Dlatego często widzisz zamiast tego

#define BUFFER_SIZE 1024 
unsigned char buffer[BUFFER_SIZE]; 

Od C99 można można zrobić poprzedni, ale nie w zasięgu globalnym. Nie będzie działać poza funkcją (nawet jeśli jest wykonana static). Ponieważ wiele kodu w jądrze zajmuje się podobnymi konstrukcjami, może to być jeden z powodów używania preprocesora.

Uwaga: nie zapomnij o sizeof, jest to bardzo dobre narzędzie, jeśli chodzi o nie powtarzanie stałej wielkości w całym miejscu, niezależnie od tego, w jaki sposób wprowadzono stałą.

+0

Tak, znam rozmiar. Niestety, ta stała jest określona przez zewnętrzne wymagania sprzętowe i musi być znana a priori (nie mogę zapytać o tę liczbę, po prostu musi być znana jako 3). – Yeraze

Powiązane problemy