2012-05-21 17 views
19

Nella libreria standard (glibc) vedo le funzioni definite con i trattini di sottolineatura doppio iniziali, come in sys/mman.h. Qual è lo scopo? E come possiamo ancora chiamare una funzione mmap che non sembra essere dichiarata da nessuna parte. Voglio dire che includiamo sys/mman.h per quello, ma sys/mman.h non dichiara mmap, dichiara solo __mmap.Significato di doppia sottolineatura all'inizio

+3

Double underscore: http://stackoverflow.com/questions/224397/why-do-people-use-double-underscore-so-much-in-c (la domanda dice C++, ma '__' è anche dallo standard ANSI C). Anche nella mia versione di 'sys/mman.h',' mmap' è definito. – birryree

+0

'__mmap' non è dichiarato da nessuna parte da glibc. Non ho idea di cosa stai parlando. –

+0

Stai guardando le intestazioni del kernel, non le intestazioni glibc? –

risposta

16

Da manuale di GNU:

Oltre ai nomi documentati in questo manuale, nomi riservati comprendono tutti gli identificatori esterni (funzioni globali e variabili) che iniziano con un carattere di sottolineatura ('_') e tutti identificatori indipendentemente dall'uso che iniziano con due trattini bassi o un trattino basso seguito da una lettera maiuscola sono nomi riservati. In questo modo la libreria e i file di intestazione possono definire funzioni, variabili e macro per scopi interni senza rischio di conflitto con i nomi nei programmi utente.

Questa è una convenzione utilizzata anche dai fornitori C e C++.

5

I nomi con doppio trattino di sottolineatura principale sono riservati per uso interno dall'implementazione (compilatore/libreria standard/ecc.). Non dovrebbero mai apparire nel tuo codice. Lo scopo di questo spazio dei nomi riservato è di fornire i nomi delle intestazioni di sistema che possono utilizzare senza potenzialmente interferire con i nomi utilizzati nel programma.

+0

Mi piace la tua risposta che è gentile con me. –

6

ISO 9899: 2011

7.1.3 identificatori riservati

Ogni intestazione dichiara o definisce tutti gli identificatori elencati nel suo sottoclausola associato e opzionalmente dichiara o definisce identificatori elencati nella sua libreria futuro associato indicazioni del subclauso e identificatori che sono sempre riservati per qualsiasi uso o per uso come identificatori dello scope di file .

- Tutti gli identificatori che iniziano con un carattere di sottolineatura e sia una lettera maiuscola o nell'altro sottolineatura sono sempre riservato per qualsiasi uso.

- Tutti gli identificatori che iniziano con un sottolineatura sono sempre riservati per l'uso come identificatori con ambito di file in entrambi gli spazi dei nomi ordinari e tag.

Problemi correlati