Quelle est la signification des traits de soulignement avant et arrière dans les identifiants du kernel Linux?

Je continue à courir à travers de petites conventions comme __KERNEL__ .

Le __ dans ce cas est-il une convention de dénomination utilisée par les développeurs du kernel ou s’agit-il d’une raison spécifique à la syntaxe pour nommer une macro de cette manière?

Il en existe de nombreux exemples dans le code.

Par exemple, certaines fonctions et variables commencent par un _ ou même __ .

Y a-t-il une raison spécifique à cela?

Cela semble assez répandu et j’ai simplement besoin de clarifier si ces choses ont un but syntaxique ou est-ce simplement une convention de dénomination.

De plus, je vois beaucoup de types déclarés par l’utilisateur, tels que uid_t. Encore une fois, je suppose qu’il s’agit d’une convention de dénomination indiquant au lecteur qu’il s’agit d’un type défini par l’utilisateur.

Il y a plusieurs cas:

  • Dans les en-têtes du public, c’est-à-dire tout ce que libc prendra en charge et /usr/include/linux , les normes spécifient les symboles à définir et tout autre symbole spécifique au système doit commencer par un trait de soulignement ou une majuscule. C’est la raison de __KERNEL__ en particulier, car il est utilisé dans les en-têtes inclus à la fois dans le kernel et dans la libc et certaines déclarations sont différentes.
  • Dans le code interne, la convention est généralement que le symbole __something est un __something travail pour something exclut une certaine gestion, souvent un locking. C’est une raison pour des choses comme __d_lookup . Une convention similaire pour les appels système est que sys_something est le point d’entrée de l’appel système qui gère le changement de contexte vers et depuis le kernel et appelle do_something pour faire le travail réel.
  • Le suffixe _t est une convention de bibliothèque standard pour les typedefs. Par size_t , size_t , ptrdiff_t , foff_t et autres. Le code du kernel suit cette convention pour ses types internes.