Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Megadja azt a szakaszt (szegmenst), amelyben const változók az objektumfájlban (.obj) vannak tárolva.
Szintaxis
#pragma const_seg([ "szakasznév" [,"szakaszosztály" ] ] ])
#pragma const_seg({push|pop} [,azonosító ] [,"szakasznév" [,"szakaszosztály" ] ] ])
Paraméterek
push
(Nem kötelező) Rekordot helyez el a belső fordítóveremen. Egy push rendelkezhet azonosítóval és szakasznév.
pop
(Nem kötelező) Eltávolít egy rekordot a belső fordítóverem tetejéről. Egy pop rendelkezhet azonosítóval és szakasznév. A azonosítóhasználatával több rekordot is előugrathat egyetlen pop paranccsal. A szakasznév lesz az aktív const szakasznév a pop után.
azonosító
(Nem kötelező) Ha pushhasznál, a belső fordítóverem rekordjának nevét rendeli hozzá. Ha pophasznál, az irányelv addig rögzíti a belső vermet, amíg el nem távolítja azonosító. Ha azonosító nem található a belső veremen, a rendszer semmit sem talál.
"szakasznév"
(Nem kötelező) Egy szakasz neve. A pophasználatakor a verem megjelenik, és szakasznév lesz az aktív const szakasznév.
"szakaszosztályú"
(Nem kötelező) Figyelmen kívül hagyja, de a Microsoft C++ 2.0-s verziónál korábbi verzióival való kompatibilitás érdekében tartalmazza.
Megjegyzések
Egy objektumfájl szakasza egy elnevezett adatblokk, amely egységként töltődik be a memóriába. A const szakasz állandó adatokat tartalmazó szakasz. Ebben a cikkben a szegmensek és szakasz azonos jelentéssel rendelkeznek.
A const_segpragma irányelv arra utasítja a fordítót, hogy a fordítási egységből származó összes állandó adatelemet egy szakasznévnevű const szakaszba helyezze. A const változók objektumfájljának alapértelmezett szakasza a .rdata. Egyes const változók, például a skalárok automatikusan be vannak ágyazva a kódstreambe. A beágyazott kód nem jelenik meg a .rdata. A szakasznév nélküli const_segpragma-irányelv paraméter alaphelyzetbe állítja a következő const adatelemek szakasznevét .rdata.
Ha olyan objektumot határoz meg, amely dinamikus inicializálást igényel egy const_seg, az eredmény nem definiált viselkedés.
A szakasz létrehozásához nem használható nevek listáját a /SECTIONcímű témakörben találja.
Az inicializált adatok (data_seg), az nem inicializált adatok (bss_seg) és a függvények (code_seg) szakaszait is megadhatja.
Az DUMPBIN.EXE alkalmazással megtekintheti az objektumfájlokat. Az egyes támogatott célarchitektúrákHOZ tartozó DUMPBIN-verziók a Visual Studio részét képezik.
Példa
// pragma_directive_const_seg.cpp
// compile with: /EHsc
#include <iostream>
const int i = 7; // inlined, not stored in .rdata
const char sz1[]= "test1"; // stored in .rdata
#pragma const_seg(".my_data1")
const char sz2[]= "test2"; // stored in .my_data1
#pragma const_seg(push, stack1, ".my_data2")
const char sz3[]= "test3"; // stored in .my_data2
#pragma const_seg(pop, stack1) // pop stack1 from stack
const char sz4[]= "test4"; // stored in .my_data1
int main() {
using namespace std;
// const data must be referenced to be put in .obj
cout << sz1 << endl;
cout << sz2 << endl;
cout << sz3 << endl;
cout << sz4 << endl;
}
test1
test2
test3
test4
Lásd még:
Pragma irányelvei, valamint a __pragma és _Pragma kulcsszavak