2014-10-13 11 views
6

Quale è più "appropriato" quando si scrive un modulo del kernel linux: utilizzando static const per definire una costante o #define?Kernel Linux: Static Const vs #Define

Ho un modulo del kernel relativo a un pezzo di hardware, e ho una costante tipica che è il numero di buffer. Invece di hard-code "3" ovunque, voglio usare una costante. Lo stile C di solito consiglia di prendere static const, ma noto che il Kernel è pieno zeppo di #define dappertutto. C'è una ragione?

+1

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

+0

Sì, ho letto che ... Mi sto chiedendo se ci sono altre implicazioni quando si lavora nel Spazio del kernel che modifica leggermente le risposte. – Yeraze

+1

Segui la convenzione del progetto su cui stai lavorando. Poiché Linux usa già #define per maschere/registri/valori hardware, usa la stessa convenzione. – nos

risposta

3

E 'usato per essere che non si poteva fare:

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

in C, in quanto buffer_size non è un "vero" costante. Quindi spesso vedi

#define BUFFER_SIZE 1024 
unsigned char buffer[BUFFER_SIZE]; 

.

A partire dal C99, si può fare il primo, ma non in ambito globale. Non funzionerà al di fuori di una funzione (nemmeno se effettuata su static). Poiché molto codice nel kernel si occupa di costrutti similari, quella potrebbe essere una ragione per usare invece il preprocessore.

Nota: non dimenticare di sizeof, si tratta di uno strumento molto utile quando si tratta di non ripetere la costante di dimensioni ovunque, indipendentemente da come è stata implementata la costante.

+0

Sì, conosco sizeof .. Sfortunatamente, questa costante è definita da requisiti hardware esterni, e deve essere nota a priori (non posso interrogare per questo numero, deve essere noto solo per essere 3). – Yeraze