Fai attenzione alla trappola:
#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)
#define MAX_ERRNO 4095
Questo copre da -1 a -4095, che rappresenta il codice di errore, non un numero inferiore a 4096, né NULL (0). Ogni valore da 0 a 4294963201 (0xfffff001) non è considerato un errore. Non utilizzarlo per coprire il controllo NULL.
Se vuoi sapere a cosa si espande la macro, compila semplicemente il tuo file usando -E
opzione di gcc, che eseguirà solo la pre-elaborazione. Includerà tutte le intestazioni ed espanderà tutte le macro.
La macro non viene "eseguita" di per sé, è solo una cosa del tipo "cerca e sostituisci".
Verifica se il puntatore fornito deve essere considerato un valore di errore .
Non controlla se il puntatore è valido.
Nel tuo codice IS_ERR viene utilizzato per verificare se class_create
riuscito a creare ebbcharClass
. Se si verifica un errore, annullare la registrazione del driver char e segnalare l'errore.
Puoi trovare le MACRO e le funzioni incorporate in err.h