Namensräume
Varianten
Aktionen

#pragma

Aus cppreference.com


    #pragma Befehl

Der #pragma-Befehl ermöglicht es dem Programmierer, den Compiler zu bestimmten Aktionen anzuweisen. Da der #pragma-Befehl abhängig von der Implementierung ist, variieren seine Anwendungsmöglichkeiten je nach benutztem Compiler. Eine Möglichkeit wäre, den Programmablauf zu verfolgen.

  1. pragma kann z. B. benutzt werden, um eine Funktion aufzurufen, bevor die main-Funktion aufgerufen oder beendet wird.
#pragma startup f1() //Die Funktion muss void zurückgeben und darf keine Parameter haben.
#pragma exit f2()


Es folgen einige Compiler-Familien und die #pragma-Anweisungen, die zu diesem Compiler gehören.

Inhaltsverzeichnis

[Bearbeiten] GNU C Compiler (GCC) - GNU/Linux, BSD, GNU/Hurd, GNU/Darwin/Mac OS X, Windows (MinGW)

[Bearbeiten] redefine_extname

    #pragma redefine_extname printf prnt

Gibt C-Funktionen ein anderes Symbol, wenn sie in Assemblersprache übersetzt werden.

[Bearbeiten] extern_prefix

    #pragma extern_prefix ext_ //Präfixe benutzen
 
    //Externe Symbole mit dem Assembler-Präfix
 
    #pragma extern_prefix //Präfixe nicht mehr benutzen

Stellt allen externen Assemblersymbolen den spezifizierten Präfix voran. Ein #pragma extern_prefix ohne Argumente beendet dies.

[Bearbeiten] pack

    #pragma pack(64) //optimiert alle folgenden Klassen, Unions und Strukturen für 64-bit-Code

Das Packen ist eine Optimierungsmethode, die die Members von Strukturen, Klassen und Unions an einem Vielfachen der Packgrenze ausrichtet. Das macht es für den Prozessor einfacher (und damit schneller), auf die Daten zuzugreifen, da sie an dem ausgerichtet wird, was der Prozessor normalerweise verarbeitet. Es kostet allerdings Speicher, da Speicherbereiche unnötigerweise unbenutzt bleiben. Die Zahl in Klammern muss eine Zweierpotenz (2, 4, 8, 16, 32, 64, ...) sein.

#pragma pack() //ohne Argument

setzt die Packeinstellung auf den Compilerstandard zurück.



<- Dies ist eine direkte Übersetzung des englischen Artikels, Stand 9.5.2010, 15:20 MESZ. Daher fehlen Informationen zu den vom Originalautor angegebenen Themen (s. u.). Wer möchte, kann diesen Artikel um besagte Dinge ergänzen und diese Notiz entfernen. Ich kenne mich dafür zu wenig mit #pragma aus. --yyyyyyy

<- #pragma pack(push) and #pragma pack(pop) are on the way, I'm still researching them and their functionality.

<- This document is still under construction, I intend to continue adding compilers and their pragma options instead of leaving this largely blank. -GinoMan