2012-02-24 10 views
5

sigo corriendo por pequeñas convenciones como __KERNEL__.¿Cuál es el significado de los caracteres de subrayado iniciales y finales en los identificadores de kernel de Linux?

¿Es el __ en este caso una convención de nomenclatura utilizada por los desarrolladores del núcleo o es una razón específica de la sintaxis para nombrar una macro de esta manera?

Hay muchos ejemplos de esto en todo el código.

Por ejemplo, algunas funciones y variables comienzan con _ o incluso __.

¿Hay alguna razón específica para esto?

Parece bastante utilizado y solo necesito aclarar si estas cosas tienen un propósito sintáctico o simplemente es una convención de nomenclatura.

Además, veo muchos tipos declarados por el usuario, como uid_t. De nuevo, supongo que esta es una convención de nombres que le dice al lector que es un tipo definido por el usuario.

+2

El '_t' le dice que es un tipo hecho por' typedef'. – Linuxios

+0

Saludos por la respuesta. Lo siento, para aclarar una ambigüedad, cuando digo tipos definidos por el usuario, me refiero a aquellos definidos por typedef. –

+1

Claro. En cuanto a los guiones bajos, creo que se debe evitar que una macro se use donde no estaba destinada cuando tiene un nombre ambiguo con una función o clase. – Linuxios

Respuesta

4

hay varios casos:

  • En las cabeceras del lado público, es decir, cualquier cosa que LIBC se hará cargo y poner bajo /usr/include/linux, las normas especifican que debería definirse símbolos y cualquier otro símbolo específicos para el sistema deberá comience con guion bajo y mayúscula o dos guiones bajos. Esa es la razón de __KERNEL__ en particular, porque se usa en los encabezados que se incluyen tanto en kernel como en libc y algunas declaraciones son diferentes.
  • En el código interno, la convención por lo general es que el símbolo __something es un caballo de batalla para something excluyendo cierta administración, a menudo bloqueando. Esa es una razón para cosas como __d_lookup. Una convención similar para las llamadas al sistema es que sys_something es el punto de entrada de llamada del sistema que maneja el cambio de contexto hacia y desde kernel y llama al do_something para hacer el trabajo real.
  • El sufijo _t es una convención de biblioteca estándar para typedefs. P.ej. size_t, ptrdiff_t, foff_t y tal. El código Kernel sigue esta convención para sus tipos internos también.
+0

Gracias por su respuesta. Con toda la documentación de estilo de codificación sobre el kernel, me sorprende que no encuentre mucha documentación sobre las convenciones de nomenclatura en el kernel. ¿Acabas de recoger estas cosas haciendo kernel hacking? – KarateSnowMachine

+0

@KarateSnowMachine: Bueno, el primer y último punto vienen del estándar C. El punto medio, en su mayoría sí. No hice ningún hack kernel serio, pero tenía una tarea en Kernel en la escuela, así que tuve que leer bastante el código (especialmente para verificar el bloqueo). –

Cuestiones relacionadas