2012-08-16 2 views
9

Qual è l'uso di "#pragma section <XYZ>" in C?A cosa serve la "sezione #pragma <XYZ>" in C?

mi sono imbattuto in file di codice C in cui è stato utilizzato il seguente tipo: -

#define XYZ "ITEM 26.G03" 

#pragma section <XYZ> 

dove XYZ è: #define XYZ "ITEM 26.G03"

Ho bisogno di qualche spiegazione sull'uso di "#pragma section"

+0

http://stackoverflow.com/questions/9716637/what-is-the-use-of-pragma-code-section-and-data-seection – codejammer

+0

Puoi accettare la risposta se ti aiuta. Anche i futuri visitatori ne trarranno beneficio. – Jaguar

risposta

4

sezione crea una sezione in un file .obj.
Fare riferimento a MSDN per ulteriori dettagli.

Codice e dati vengono generati in sezioni in un file oggetto, combinati dal linker in un file eseguibile e infine collocati nella memoria di destinazione in posizioni specifiche. Le sezioni predefinite sono predefinite e hanno determinati attributi. La direttiva sezione può essere utilizzata per modificare gli attributi predefiniti, definire nuove sezioni e controllare l'assegnazione di codice e variabili a sezioni particolari e, insieme al file di comando del linker, le relative posizioni.

#pragma section definisce una classe di sezione e facoltativamente una o due sezioni nella classe. Una classe di sezione controlla l'indirizzamento e l'accessibilità di variabili e codice inseriti in un'istanza della classe.

7

La direttiva #pragma è una direttiva di implementazione specifica è un modo standard per fornire informazioni aggiuntive al compilatore. Questa direttiva ha la seguente forma:

#pragma name 

Se il preprocessore riconosce il "nome" specificato, esegue qualsiasi azione essi rappresentano, o passa le informazioni al compilatore. Se "nome" non è supportato dall'implementazione c , viene ignorato.

Ad esempio compiler gcc accettare l'elenco di direttive elencato here.

Per la #pragma section, la documentazione di gcc detto:

sezione ("section-name") Normalmente, il compilatore inserisce il codice che genera nella sezione testo. A volte, tuttavia, sono necessarie ulteriori sezioni oppure alcune funzioni particolari devono essere visualizzate nelle sezioni speciali . L'attributo section specifica che una funzione è presente in una particolare sezione. Ad esempio, la dichiarazione:

 extern void foobar (void) __attribute__ ((section ("bar"))); 

mette la funzione foobar nella sezione della barra.

Alcuni formati di file non supportano sezioni arbitrarie, pertanto l'attributo della sezione non è disponibile su tutte le piattaforme. Se è necessario mappare l'intero contenuto di di un modulo in una particolare sezione, considerare l'utilizzo di invece delle funzionalità del linker.

Maggiori informazioni su quello here.