1. 程式人生 > >#pragma GCC system_header用法

#pragma GCC system_header用法

osi 手冊 mat clu because lin however director ebr

在看公司公共庫的頭文件中發現了:#pragma GCC system_header一行,以前沒有見過這種用法,在網上查了一下,解釋如下:

從#pragma GCC system_header直到文件結束之間的代碼會被編譯器視為系統頭文件之中的代碼。系統頭文件中的代碼往往不能完全遵循C標準, 所以頭文件之中的警告信息往往不顯示。(除非用 #warning顯式指明)。

可以查看gcc參考手冊:http://gcc.gnu.org/onlinedocs/cpp/System-Headers.html#System-Headers

The header files declaring interfaces to the operating system and runtime libraries often cannot be written in strictly conforming C. Therefore, GCC gives code found in system headers

special treatment. All warnings, other than those generated by ‘#warning’ (see Diagnostics), are suppressed while GCC is processing a system header. Macros defined in a system header are immune to a few warnings wherever they are expanded. This immunity is granted on an ad-hoc basis, when we find that a warning generates lots of false positives because of code in macros defined in system headers.

Normally, only the headers found in specific directories are considered system headers. These directories are determined when GCC is compiled. There are, however, two ways to make normal headers into system headers:

  • Header files found in directories added to the search path with the -isystem and -idirafter
    command-line options are treated as system headers for the purposes of diagnostics.
  • There is also a directive, #pragma GCC system_header, which tells GCC to consider the rest of the current include file a system header, no matter where it was found. Code that comes before the ‘#pragma’ in the file is not affected. #pragma GCC system_header has no effect in the primary source file.

#pragma GCC system_header用法