pythonic
pythonic

Reputation: 21665

Meaning of double underscore in the beginning

In the standard library (glibc) I see functions defined with leading double underscores, such as __mmap in sys/mman.h. What is the purpose? And how can we still call a function mmap which doesn't seem to be declared anywhere. I mean we include sys/mman.h for that, but sys/mman.h doesn't declare mmap, it declares only __mmap.

Upvotes: 24

Views: 15717

Answers (3)

Lundin
Lundin

Reputation: 215115

ISO 9899:2011

7.1.3 Reserved identifiers

Each header declares or defines all identifiers listed in its associated subclause, and optionally declares or defines identifiers listed in its associated future library directions subclause and identifiers which are always reserved either for any use or for use as file scope identifiers.

— All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use.

— All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces.

Upvotes: 7

R.. GitHub STOP HELPING ICE
R.. GitHub STOP HELPING ICE

Reputation: 215577

Names with leading double underscore are reserved for internal use by the implementation (compiler/standard library/etc.). They should never appear in your code. The purpose of this reserved namespace is to give the system headers names they can use without potentially clashing with names used in your program.

Upvotes: 8

dirkgently
dirkgently

Reputation: 111298

From GNU's manual:

In addition to the names documented in this manual, reserved names include all external identifiers (global functions and variables) that begin with an underscore (‘_’) and all identifiers regardless of use that begin with either two underscores or an underscore followed by a capital letter are reserved names. This is so that the library and header files can define functions, variables, and macros for internal purposes without risk of conflict with names in user programs.

This is a convention which is also used by C and C++ vendors.

Upvotes: 20

Related Questions