C ++ pragma GCC system_header direttiva
Domanda
Ciò C ++ direttiva fare:? "#Pragma GCC system_header"
Soluzione
Ho cercato su google e ottenuto questo :
#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.
Maggiori informazioni sulle intestazioni di sistema
2.7. Sistema di intestazioni
I file di intestazione dichiarando interfacce al sistema operativo e il runtime le biblioteche spesso non possono essere scritti in strettamente conforme C. Pertanto, GCC dà codice trovato nelle intestazioni di sistema trattamento speciale. Tutte le avvertenze, altro di quelli generati dalla #warning (Capitolo 5 Diagnostica), sono soppresso mentre GCC elabora un intestazione di sistema. Macro definiti in un intestazione di sistema sono immuni ad alcuni avvertenze ovunque essi vengono espansi. Questa immunità è concessa su un ad-hoc basi, quando troviamo che un avvertimento genera un sacco di falsi positivi a causa di codice nella macro definite in header di sistema.
Normalmente, solo le intestazioni trovano in directory specifiche sono considerati header di sistema. Questi elenchi sono determinato quando GCC viene compilato. Là sono, tuttavia, due modi per rendere normale intestazioni nelle intestazioni di sistema.
L'opzione riga di comando -isystem aggiunge il suo argomento alla lista delle directory per la ricerca per le intestazioni, proprio come -I. Tutte le intestazioni si trovano in quella directory sarà considerata header di sistema.
Tutte le directory nominati da -isystem sono cercato dopo tutte le directory di nome da -I, non importa quale sia il loro ordine era sulla riga di comando. Se lo stesso directory è chiamato da entrambi -I e -isystem, l'opzione -I viene ignorata. GCC fornisce un messaggio informativo quando questo si verifica se si utilizza -v.
C'è anche una direttiva, #pragma GCC system_header, che racconta GCC a prendere in considerazione il resto della corrente includere un file di intestazione di sistema, non indipendentemente da dove è stato trovato. Il codice che viene prima il #pragma nel file non saranno interessati. #pragma GCC system_header non ha alcun effetto nel file sorgente primaria.
Il molto vecchi sistemi, alcuni dei elenchi di intestazione di sistema predefiniti ottenere un trattamento ancora più speciale. GNU C ++ considera il codice nelle intestazioni si trovano in queste directory per essere circondati da un blocco extern "C". Non c'è alcun modo per richiedere questo comportamento con un
#pragma
, o dalla riga di comando.
Altri suggerimenti
Si dice che tutto oltre questo punto viene trattato come se fosse in un colpo di testa del sistema. Ciò significa che tutti gli avvertimenti diversi #WARNING vengono soppresse