2010-01-03 3 views
0

Союз epoll_data_t выглядит следующим образом:epoll_data_t вопрос (в частности, о типах данных C)

typedef union epoll_data { 
    void *ptr; 
    int fd; 
    __uint32_t u32; 
    __uint64_t u64; 
} epoll_data_t; 

Это более общий вопрос C, но почему ведущие двойное нижнее подчеркивание __uint {32,64} типов вместо только uint {32,64} без подчеркивания? Я действительно не понимаю, почему/когда вы будете использовать версию подчеркивания, но я думал, что uint32 без подчеркивания будет правильной вещью для использования в объединении, общедоступном для внешнего мира.

ответ

1

Непосредственно из Википедии [http://en.wikipedia.org/wiki/Underscore]

Многих столкновений были возможны в пределах внешнего идентификатора рычажного пространства , которые потенциально смешивается код , генерируемого различным высокого уровнем составителей, библиотеки времени выполнения требуемых каждым из этих составителей, компилятор сгенерировал вспомогательные функции и код запуска программы, из которого некоторая часть была неизбежно скомпилирована из системы ассемблера. В пределах этого домена символ подчеркивания персонаж быстро закрепился как основной механизм для , дифференцирующий внешнюю связь пространство. Для компиляторов C было распространено обобщение знака на все внешние области идентификаторы программ для предотвращения столкновений с вкладами от времени выполнения поддержка языков. Кроме того, когда /C++, компилятор C нужно ввести имен в качестве внешней связи части процесса перевода, эти имена часто отличаются с некоторыми сочетанием нескольких ведущих или завершающих подчеркиваниями.

+0

Это действительно не имеет отношения к этому конкретному вопросу, хотя это касается имен типов, которые не имеют связи в C. – caf

1

Ведущее подчеркивание зарезервировано для поставщика компилятора/библиотеки, чтобы избежать создания символов в глобальном пространстве имен, которые сталкиваются с символами, созданными их клиентами. К сожалению, клиенты используют это также для своих объявлений «системного уровня», как и сторонние поставщики библиотеки, заставляя поставщиков начать использовать два символа подчеркивания. Символы с 3 символами подчеркивания были найдены в дикой природе, но еще не широко распространены.

2

Целые типы с фиксированной шириной были стандартизированы с помощью C99. До этого авторы компилятора и библиотеки вводили свои собственные типы, из которых они могли бы быть остатком; afaik MS по-прежнему не отправляет stdint.h с Visul Studio.