C++ прагма GCC system_header директива

Что делает эта директива C++: "#pragma GCC system_header"?

2 ответа

Решение

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

#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. Любые заголовки, найденные в этом каталоге, будут считаться системными заголовками.

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

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

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

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

Другие вопросы по тегам