2017-01-16 2 views
0

Я знаю, что это очень глупый вопрос, но я не могу получить разницу между заголовком системы и нормальным заголовком в gcc.Заголовок системы и обычный заголовок gcc

Отсносящийся к этому link:

2.8 Системные Заголовки

заголовочные файлы, объявляющие интерфейсы к операционной системе и библиотеки времени выполнения часто не могут быть записаны в строго соответствии C. Таким образом, НКУ дает код, найденный в системных заголовках специальной обработки. Все предупреждения, отличные от тех, которые генерируются «#warning» (см. Diagnostics), подавляются, в то время как GCC обрабатывает системный заголовок. Макросы, определенные в заголовке системы, защищены от нескольких предупреждений , где бы они ни были расширены. Этот иммунитет предоставляется на основе ad-hoc , когда мы обнаруживаем, что предупреждение генерирует множество ложных срабатываний из-за кода в макросах, определенных в заголовках системы.

Как правило, только заголовки, найденные в определенных каталогах, являются , рассматриваемыми системными заголовками. Эти каталоги определяются при компиляции GCC . Есть, однако, два способа сделать нормальные заголовки в системных заголовки:

заголовки файлов, найденных в каталогах, добавленных в пути поиска с -isystem и -idirafter параметров командной строки рассматриваются как системы заголовков цели диагностики. Существует также директива #pragma GCC system_header, в которой GCC рассмотрит остальную часть текущего файла include, системный заголовок , независимо от того, где он был найден. Код, который предшествует «#pragma» в , не влияет на файл. #pragma GCC system_header не имеет никакого эффекта в файле основного файла.

Я ценю ответ, показывающий некоторое содержимое заголовка системы, если это возможно, и какие предупреждения или специальное обращение говорится в ссылке.

ответ

1

Системные заголовки - это заголовочные файлы, которые поставляются с ОС или компилятором, и находятся в каталогах, таких как /usr/include на Unix. Обычные заголовки - это все остальное, например файлы заголовков, которые вы пишете сами, или файлы, которые поставляются с загружаемым вами приложением или библиотекой.

+0

Значит, вы имеете в виду, что системные заголовки являются заголовками по умолчанию для компиляторов Gcc. – Sabrina

+0

В документации, которую вы указали, указаны «конкретные каталоги». Я не знаю, соответствует ли это всем каталогам по умолчанию, это могут быть некоторые из них. – Barmar

+0

@Bramar: Ссылка говорит: «Эти каталоги определяются при компиляции GCC». Это означает, что если вы сами компилируете GCC из исходного кода, вы определяете, что представляют собой эти каталоги. –

0

what kind of warnings or special treatment is talking about in the link.

Это предупреждения, которые выдаются для использования C, что является устаревшим в соответствии с действующими стандартами, но считалось приемлемым, когда были написаны системные заголовки. Например, предупреждение you are assigning a string literal to a char*". (который в настоящее время будет выполнен с использованием ключевого слова const).

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