2016-06-19 5 views
1

Я вижу, что законно использовать переменную __PTRDIFF_TYPE__ без включения заголовка.Значение по умолчанию __PTRDIFF_TYPE__

Я попытался найти это имя переменной в ISO/IEC 9899, но он не отображается. Я ожидал увидеть его определение в 7-й части библиотеки C.

Почему это легально?

Я использую gcc под Linux/GNU.

+0

О ком компилятор, о котором вы говорите? – Cornstalks

+0

О, я забыл упомянуть о системе - linux/gnu, поэтому gcc. – alinsoar

+0

Чтобы просмотреть предопределенные макросы из gcc (и clang), вы можете использовать следующую команду: ['gcc -dM -E - Cornstalks

ответ

2

Это предопределенный макрос в gcc (расширение GNU C); см. https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html.

Что касается причин, почему это законно: стандарт резервирует все имена, начинающиеся с двух символов подчеркивания (и всех имен, начинающихся с символа подчеркивания, за которым следует буква верхнего регистра), для использования в реализации, поэтому gcc может предварительно определить __whatever и по-прежнему следовать стандарту ,

+0

ах, вы имеете в виду, что это расширение GCC? Я подозреваю, что он используется другими компиляторами. – alinsoar

+0

@alinsoar: Это расширение, которое будет использоваться для стандартных заголовков. Возможно, это проще, чем куча 'ifdef' для настройки' ptrdiff_t' для каждой платформы. Как я писал выше, вы не должны использовать его в коде приложения. – Olaf

+0

Это законно для реализации, чтобы определить этот макрос. Это приложение автоматически не предоставляется. С точки зрения стандарта это окончательно не является. – Olaf

Смежные вопросы