Вопрос

Что делает эта директива C ++: «#Pragma gcc System_header»?

Это было полезно?

Решение

Я гуглил и получил это:

#pragma GCC system_header

This pragma takes no arguments. It causes the rest of the code in the
current file to be treated as if it came from a system header. Section 2.7
System Headers.

Больше информации о заголовках системы

2.7 Заголовки системы

Файлы заголовков, объявляющие интерфейсы операционной системе, и библиотеки времени выполнения, часто не могут быть записаны в строго соответствующем C. Поэтому GCC дает код, обнаруженный в специальной обработке заголовков системы. Все предупреждения, кроме тех, которые генерируются #Warning (Глава 5 Диагностика), подавляются, в то время как GCC обрабатывает заголовок системы. Макросы, определенные в заголовке системы, невосприимчивы к нескольким предупреждениям, где бы они ни были расширены. Этот иммунитет предоставляется на специальной основе, когда мы обнаруживаем, что предупреждение генерирует много ложных срабатываний из-за кода на макросах, определенных в заголовках системы.

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

Опция командной строки -Isystem добавляет свой аргумент в список каталогов для поиска заголовков, как -i. Любые заголовки, найденные в этом каталоге, будут рассматриваться для системных заголовков.

Все каталоги, названные -иссистемой, обыскиваются после всех каталогов, названных -i, независимо от того, какой их порядок был в командной строке. Если один и тот же каталог назван как -i, так и -исистемой, опция -i игнорируется. GCC предоставляет информативное сообщение, когда это происходит, если используется -V.

Существует также директива, #Pragma GCC System_header, которая говорит GCC рассмотреть остальную часть текущего, включающую заголовок File a System, где бы он ни был найден. Код, который поступает до #Pragma в файле, не будет затронут. #pragma gcc System_header не влияет на первичный исходный файл.

В очень старых системах некоторые из предварительно определенных каталогов заголовков системы получают еще больше особого лечения. GNU C ++ рассматривает код в заголовках, найденных в тех каталогах, которые будут окружены блоком внешнего «C». Нет способа запросить это поведение с помощью #pragma, или из командной строки.

Другие советы

В нем говорится, что все, что прошло эта точка, обращается так, как если бы оно было в заголовке системы. Это означает, что все предупреждения, кроме #Warning, подавлены

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top