2012-05-21 13 views
19

En la biblioteca estándar (glibc) veo funciones definidas con subrayados dobles iniciales, como __mmap en sys/mman.h. ¿Cuál es el propósito? Y ¿cómo podemos llamar a una función mmap que no parece declararse en ningún lugar? Quiero decir que incluimos sys/mman.h para eso, pero sys/mman.h no declara mmap, declara solo __mmap.Significado del subrayado doble al comienzo

+3

Doble guión bajo: http://stackoverflow.com/questions/224397/why-do-people-use-double-underscore-so-much-in-c (la pregunta dice C++, pero el '__' es del estándar ANSI C también). También en mi versión de 'sys/mman.h',' mmap' está definido. – birryree

+0

'__mmap' no está declarado en ningún lado por glibc. No tengo idea de lo que estás hablando. –

+0

¿Está buscando los encabezados kernel, no los encabezados glibc? –

Respuesta

16

Desde el manual de GNU:

Además de los nombres documentados en este manual, los nombres reservados incluyen todos los identificadores externos (funciones globales y variables) que comienzan con un guión bajo ('_') y todos los identificadores independientemente del uso que comienzan con dos guiones bajos o un guión bajo seguido de una letra mayúscula son nombres reservados. Esto es para que la biblioteca y los archivos de encabezado puedan definir funciones, variables y macros para fines internos sin riesgo de conflicto con nombres en programas de usuario.

Esta es una convención que también es utilizada por los vendedores C y C++.

5

Los nombres con guion bajo doble inicial están reservados para uso interno por la implementación (compilador/librería estándar/etc.). Nunca deberían aparecer en tu código. El propósito de este espacio de nombres reservado es darles a los encabezados del sistema los nombres que pueden usar sin potencialmente entrar en conflicto con los nombres utilizados en su programa.

+0

Me gusta su respuesta que es amable conmigo. –

6

ISO 9899: 2011

7.1.3 identificadores Reservados

Cada cabecera declara o define todos los identificadores que figuran en su subcláusula asociada, y opcionalmente la declara o define identificadores enumerados en su biblioteca futuro asociado instrucciones subcláusula y identificadores que siempre se reservan para cualquier uso o para uso como identificadores de alcance de archivo .

- Todos los identificadores que comienzan con un guión bajo y, o bien una letra mayúscula o en otro guión bajo son siempre reservada para cualquier uso.

- Todos los identificadores que comiencen con un guión bajo de siempre se reservan para usar como identificadores con el alcance del archivo tanto en el espacio ordinario como en el espacio de nombre de etiqueta.

Cuestiones relacionadas