Udostępnij za pośrednictwem


const_seg pragma

Określa sekcję (segment), w której zmienne const są przechowywane w pliku obiektu (.obj).

Składnia

#pragma const_seg( [ "section-name" [ , "section-class" ] ] )
#pragma const_seg({ pushpop | } [ , identyfikator ] [ , "nazwa-sekcji" [ , "section-class" ])

Parametry

push
(Opcjonalnie) Umieszcza rekord w wewnętrznym stosie kompilatora. Element push może mieć identyfikator i nazwę sekcji.

pop
(Opcjonalnie) Usuwa rekord z góry wewnętrznego stosu kompilatora. Element pop może mieć identyfikator i nazwę sekcji. Wiele rekordów można wyświetlać przy użyciu tylko jednego pop polecenia przy użyciu identyfikatora. Nazwa-sekcji staje się aktywną nazwą sekcji const po wyskakującym okienku.

identifier
(Opcjonalnie) W przypadku użycia z pushprogramem przypisuje nazwę do rekordu w wewnętrznym stosie kompilatora. W przypadku użycia z funkcją popdyrektywa wyskakuje rekordy poza stos wewnętrzny do momentu usunięcia identyfikatora . Jeśli identyfikator nie zostanie znaleziony na stosie wewnętrznym, nic nie zostanie pominięte.

"nazwa-sekcji"
(Opcjonalnie) Nazwa sekcji. W przypadku użycia z elementem popstos jest zwinięty, a nazwa-sekcji staje się aktywną nazwą sekcji const.

"section-class"
(Opcjonalnie) Zignorowane, ale uwzględnione w celu zachowania zgodności z wersjami języka Microsoft C++ starszymi niż wersja 2.0.

Uwagi

Sekcja w pliku obiektu jest nazwanym blokiem danych załadowanych do pamięci jako jednostki. Sekcja const to sekcja zawierająca dane stałe. W tym artykule terminy segmentu i sekcji mają takie samo znaczenie.

Dyrektywa const_segpragma nakazuje kompilatorowi umieszczenie wszystkich stałych elementów danych z jednostki tłumaczenia w sekcji const o nazwie section-name. Domyślna sekcja w pliku obiektu zmiennych const to .rdata. Niektóre const zmienne, takie jak skalarne, są automatycznie wstawiane do strumienia kodu. Wbudowany kod nie jest wyświetlany w pliku .rdata. const_segpragma Dyrektywa bez parametru nazwa-sekcji resetuje nazwę sekcji dla kolejnych const elementów danych na .rdata.

Jeśli zdefiniujesz obiekt, który wymaga inicjowania dynamicznego w obiekcie const_seg, wynik jest niezdefiniowany.

Aby uzyskać listę nazw, których nie należy używać do tworzenia sekcji, zobacz /SECTION.

Można również określić sekcje dla zainicjowanych danych (data_seg), niezainicjowanych danych (bss_seg) i funkcji (code_seg).

Aby wyświetlić pliki obiektów, możesz użyć aplikacji DUMPBIN.EXE . Wersje narzędzia DUMPBIN dla każdej obsługiwanej architektury docelowej są dołączone do programu Visual Studio.

Przykład

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

Zobacz też

Pragmadyrektywy i __pragma słowa kluczowe i _Pragma