Значение двойного подчеркивания в начале

В стандартной библиотеке (glibc) я вижу функции, определенные с начальными двойными подчеркиваниями, такие как__mmap вsys/mman.h, Какова цель? И как мы можем по-прежнему вызывать функциюmmap который, кажется, нигде не объявлен. Я имею в виду, мы включаемsys/mman.h за это, ноsys/mman.h не объявляетmmapобъявляет только__mmap.

 wkl21 мая 2012 г., 16:22
Двойное подчеркивание:stackoverflow.com/questions/224397/… (вопрос говорит C ++, но__ также из стандарта ANSI C). Также в моей версииsys/mman.h, mmap определено.
 R..21 мая 2012 г., 16:36
__mmap glibc нигде не объявлен. Понятия не имею, о чем ты говоришь.
 Jonathan Wakely21 мая 2012 г., 19:39
Вы смотрите на заголовки ядра, а не на заголовки glibc?

Ответы на вопрос(3)

Решение Вопроса

Из руководства GNU:

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.

Это соглашение, которое также используется поставщиками C и C ++.

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.

Имена с первым двойным подчеркиванием зарезервированы для внутреннего использования реализацией (компилятор / стандартная библиотека / и т. Д.). Они никогда не должны появляться в вашем коде. Цель этого зарезервированного пространства имен - дать системным заголовкам имена, которые они могут использовать без потенциального конфликта с именами, используемыми в вашей программе.

 19 апр. 2017 г., 05:31
Мне нравится ваш ответ, который добр ко мне.

Ваш ответ на вопрос