2010-07-24 19 views
7

Duplicar posible:
Why do people use __(double underscore) so much in C++¿Qué significa un doble guión bajo en un nombre de variable en el lenguaje C?

estaba estudiando el código de programación del núcleo de Linux.

Hay algunas estructuras de datos y funciones que comienzan con un doble subrayado como:

__u32 len 

¿Cómo es diferente de variables normales?

+0

http: // stackoverflow. com/questions/224397/why-do-people-use-double-underscore-so-much-in-c –

+1

No estoy de acuerdo con el duplicado porque se trata del kernel * Linux *, que es C y no C++, y en algunos puntos es un mundo propio. –

+0

Mire http://stackoverflow.com/a/224420/1657476 "El uso de dos guiones bajos (' __ ') en los identificadores está reservado para el uso interno del compilador según el ** estándar ANSI-C **. " –

Respuesta

12

Significa que es un nombre reservado por el sistema. El estándar C dice que todos los nombres que comiencen con dos guiones bajos, guiones bajos o letras mayúsculas, están reservados para el uso del sistema o compilador y no deben definirse en el código de la aplicación.

+0

Si no debería permitirse, ¿por qué está disponible para su uso? Por sistema, ¿te refieres al sistema operativo? –

1

Ese es un tipo, definido en here (así como en algunos otros lugares).

Por convención, generalmente un guion bajo doble delante de un tipo, variable o nombre de función implica un nombre que siempre se reserva, como se define en la sección 7.1.3 del estándar actual (C99).

2

Las demás respuestas son correctas y están reservadas para la implementación. Por supuesto aquí Linux debe avanzar fuera del siglo 20 y utilizar el estándar tipo uint32_t en lugar de la miríada de nombres no estándar (__u32, u_int32_t, ...) que Unix legado plagado ..

+0

Esos tipos se definen exactamente de la misma manera que están definidos por los encabezados de biblioteca estándar (stdint.h). ¿Por qué es tan importante si a) son del mismo tipo yb) no se exportan para ser utilizados por los programas de espacio de usuario? –

+0

@mfukar La consistencia es importante desde el punto de vista del mantenimiento. El uso de diez nombres diferentes para el mismo tipo no solo introduce posibles problemas de compatibilidad (por ejemplo, utilizando tipos específicos long, uint, etc. mezclados con int genérico, cuyo tamaño depende de la plataforma), disminuye la legibilidad del código. –

+0

Intenté entender el código kernel c pero está pasando por alto mi cabeza. Creo que tengo menos comprensión con los punteros o la función del puntero dentro de las estructuras. ¿Hay algún libro en C donde pueda estudiar esos temas por separado para poder leer el código del kernel? –

Cuestiones relacionadas