Verwendung von #pragma in C
Was sind einige Möglichkeiten, wie #pragma
in C, mit Beispielen?
InformationsquelleAutor der Frage | 2008-10-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was sind einige Möglichkeiten, wie #pragma
in C, mit Beispielen?
InformationsquelleAutor der Frage | 2008-10-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
#pragma
ist für die compiler-Direktiven, die Maschine-spezifischen oder Betriebssystem-spezifisch, d.h. es weist den compiler an, tun Sie etwas, setzen Sie eine option, einige Maßnahmen ergreifen, überschreiben default, etc. kann oder kann nicht für alle Geräte und Betriebssysteme.Sehen msdn für mehr info.
InformationsquelleAutor der Antwort Steven A. Lowe
#pragma
verwendet wird, etwas zu tun, implementierungsspezifisches in C, also pragmatisch sein, für den aktuellen Kontext eher als ideologisch-dogmatische.Die, die ich regelmäßig benutze, ist
#pragma pack(1)
wo ich bin versuchen, squeeze mehr aus meinem Speicher auf embedded-Lösungen mit arrays von Strukturen, die sonst am Ende mit 8-byte-Ausrichtung.Schade das wir nicht haben, eine
#dogma
noch. Das würde Spaß machen 😉InformationsquelleAutor der Antwort Shane MacLaughlin
Würde ich generell versuchen zu vermeiden, die Verwendung von #pragma wenn möglich, da Sie extrem compiler-abhängig und nicht portierbar. Wenn Sie möchten, verwenden Sie eine tragbare Mode, müssen Sie die surround-jedes pragma mit #if/#endif-pair-Mädchen. GCC rät von der Verwendung von pragmas, und wirklich nur unterstützt einige von Ihnen für die Kompatibilität mit anderen Compilern GCC hat andere Möglichkeiten, die gleichen Dinge tun, dass andere Compiler verwenden, pragmas für.
Zum Beispiel, hier ist, wie würden Sie sicherstellen, dass eine Struktur ist dicht (D. H. keine Polsterung zwischen den Mitgliedern) in MSVC:
Hier ist, wie würden Sie tun die gleiche Sache in GCC:
Den GCC code ist mehr tragbar, denn wenn Sie wollen, um zu kompilieren, die mit einem nicht-GCC compiler, alles, was Sie tun müssen, ist
#define __attribute__(x)
In der Erwägung, dass, wenn Sie wollen-port der MSVC-code haben, müssen Sie die surround-jedes pragma mit #if/#endif-pair-Mädchen. Nicht schön.
InformationsquelleAutor der Antwort Adam Rosenfield
Setzen
#pragma once
an der Spitze der header-Datei wird sichergestellt, dass es nur einmal. Beachten Sie, dass#pragma once
ist nicht C99-standard, aber unterstützt durch die meisten modernen Compiler.Alternative ist die Verwendung von include-guards (z.B.
#ifndef MY_FILE #define MY_FILE ... #endif /* MY_FILE */
)InformationsquelleAutor der Antwort Schildmeijer
was ich fühle, ist
#pragma
ist eine Richtlinie, wo, wenn Sie wollen den code auf Position bestimmte .sagen einer situation, wo Sie möchten, dass das Programm counter zu Lesen ist die Adresse, wo die ISR geschrieben wird, können Sie angeben, ISR, die an diesem Ort mit#pragma vector=ADC12_VECTOR
und followd durch unterbrechen rotines name und seine BeschreibungInformationsquelleAutor der Antwort sandeep
Mein beste Rat ist zu prüfen, Ihre compiler-Dokumentation, weil pragmas sind-per definition-Umsetzung-spezifisch. Zum Beispiel in embedded-Projekten, die ich verwendet habe, Sie zu suchen, code und Daten in verschiedenen Abschnitten, oder erklären interrupt-Handler. also:
InformationsquelleAutor der Antwort Justin Love
Dies ist eine Präprozessor-Direktive, die verwendet werden können, zu aktivieren oder deaktivieren bestimmte Funktionen.
Es ist von zwei Arten
#pragma startup
#pragma exit
und#pragma warn
.#pragma startup
erlaubt uns, geben Sie der Funktion nach Programm-Start.#pragma exit
ermöglicht es uns zu geben-Funktionen aufgerufen, Programm beenden.#pragma warn
sagt dem computer, unterdrücken Sie keine Warnung oder nicht.Viele andere
#pragma
Stile können verwendet werden, um die compiler.InformationsquelleAutor der Antwort suresh pareek
#pragma startup
ist eine Richtlinie, die verwendet wird, um eine Funktion aufzurufen, bevor die main-Funktion und eine andere Funktion aufrufen, nachdem die main-Funktion, z.B.Hier
func1
läuft, bevormain
undfunc2
läuft hinterher.HINWEIS: Dieser code funktioniert nur in Turbo-C-compiler. Um diese Funktionalität zu erreichen, die in GCC, können Sie erklären
func1
undfunc2
wie diese:InformationsquelleAutor der Antwort Sparkzz
Alle oben genannten Antworten machen schöne Erklärungen für
#pragma
aber ich wollte ein kleines Beispiel hinzufügenIch will einfach nur, um zu erklären, eine
simple OpenMP example
zeigen einige Verwendungen von#pragma
zu tun, seine Arbeitlet ' s go to das Beispiel
die Ausgabe ist
nun lassen Sie mich Ihnen sagen, was
#pragma
hat...es sagt dem OS laufen einige code-block auf 4 threads
dies ist nur eine von
many many applications
können Sie sich mit dem kleinen#pragma
sorry für die außerhalb der Probe
OpenMP
InformationsquelleAutor der Antwort Basheer AL-MOMANI
Zusammenfassend
#pragma
sagt dem compiler, um Dinge zu tun. Hier sind ein paar Möglichkeiten, die ich es verwenden:#pragma
können verwendet werden, um compiler-Warnungen ignorieren. Zum Beispiel, um GCC shut up über implizite Deklarationen, können Sie schreiben:Einer älteren version von
libportable
hat dieses tragbar.#pragma once
beim schreiben oben eine header-Datei, wird dazu führen, sagte header-Datei aufgenommen zu werden, die einmal.libportable
Schecks für pragma once unterstützt.InformationsquelleAutor der Antwort MD XF