Sdílet prostřednictvím


const_seg

Určuje segment v souboru .obj, kde jsou uloženy proměnné const.

#pragma const_seg ( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] )

Poznámky

Významy pojmů segment a oddíl jsou v tomto tématu zaměnitelné.

Soubory OBJ lze zobrazit pomocí aplikace dumpbin.Výchozí segment v souboru .obj pro const proměnné je .rdata.Některé const proměnné, jako je například operace Scalar, jsou automaticky vložená do datového proudu kódu.Vložený kód se v segmentu .rdata nezobrazí.

Definování vyžadující dynamické inicializace v objektu const_seg má za následek nedefinované chování.

#pragma const_segbez parametrů obnoví .rdata segmentu.

  • push (volitelné)
    Vloží záznam do zásobníku vnitřního kompilátoru.push může mít identifier a segment-name.

  • pop (volitelné)
    Odstraní nejvyšší záznam z vnitřního zásobníku kompilátoru.

  • identifier (volitelné)
    Při použití s push přiřadí název záznamu ve vnitřním zásobníku kompilátoru.Při použití s pop bude brát záznamy z vnitřního zásobníku, dokud neodstraní identifier; pokud identifier není nalezen v interním zásobníku, nic nevezme.

    Pomocí identifier umožňuje více záznamů, které chcete-li být odebrány s jedním pop příkazu.

  • "segment-name"(volitelné)
    Název segmentuPři použití s pop, je odebrány zásobníku a segment-name se změní na název aktivní segmentu.

  • "segment-class"(volitelné)
    Zahrnuto z důvodu kompatibility s jazykem C++ starším než verze 2.0.Ignorováno.

Příklad

// 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;
}
  

Komentáře

Seznam názvů, které by při tvorbě oddílu neměly být používány, naleznete v tématu /SECTION.

Oddíly lze určit také pro inicializovaná data (data_seg), neinicializovaná data (bss_seg) a funkce (code_seg).

Viz také

Referenční dokumentace

Direktivy Pragma a klíčové slovo __Pragma