const_seg pragma

Const değişkenlerinin nesne (.obj) dosyasında depolandığı bölümü (segment) belirtir.

Sözdizimi

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

Parametreler

push
(İsteğe bağlı) İç derleyici yığınına bir kayıt yerleştirir. bir push tanımlayıcıya ve bölüm adına sahip olabilir.

pop
(İsteğe bağlı) İç derleyici yığınının üst kısmından bir kaydı kaldırır. bir pop tanımlayıcıya ve bölüm adına sahip olabilir. Tanımlayıcıyı kullanarak tek bir pop komut kullanarak birden çok kaydı açabilirsiniz. Bölüm adı , pop'un ardından etkin sabit bölüm adı olur.

identifier
(İsteğe bağlı) ile pushkullanıldığında, iç derleyici yığınındaki kayda bir ad atar. ile popkullanıldığında yönergesi, tanımlayıcı kaldırılana kadar iç yığındaki kayıtları açar. Tanımlayıcı iç yığında bulunmazsa hiçbir şey gösterilmez.

"section-name"
(İsteğe bağlı) Bölümün adı. ile popkullanıldığında, yığın açılır ve bölüm adı etkin const bölüm adı olur.

"section-class"
(İsteğe bağlı) Yoksayılır, ancak 2.0 sürümünden önceki Microsoft C++ sürümleriyle uyumluluk için dahil edilir.

Açıklamalar

Nesne dosyasındaki bölüm, belleğe birim olarak yüklenen adlandırılmış bir veri bloğudur. Const bölümü, sabit veriler içeren bir bölümdür. Bu makalede, segment ve bölüm terimleri aynı anlama sahiptir.

yönergesiconst_segpragma, derleyiciye çeviri ünitesindeki tüm sabit veri öğelerini section-name adlı bir const bölümüne yerleştirmesini söyler. Değişkenler için const nesne dosyasındaki varsayılan bölüm şeklindedir .rdata. Skalerler gibi bazı const değişkenler otomatik olarak kod akışının içine alınır. Inlined code içinde .rdatagörünmez. const_segpragma Bölüm adı parametresi olmayan bir yönerge, sonraki const veri öğelerinin bölüm adını olarak .rdatasıfırlar.

içinde dinamik başlatma const_seggerektiren bir nesne tanımlarsanız, sonuç tanımlanmamış bir davranıştır.

Bölüm oluşturmak için kullanılmaması gereken adların listesi için bkz /SECTION. .

Ayrıca, başlatılan veriler (), başlatılmamış veriler (data_seg) ve işlevler (bss_segcode_seg) için bölümler belirtebilirsiniz.

Nesne dosyalarını görüntülemek için DUMPBIN.EXE uygulamasını kullanabilirsiniz. Desteklenen her hedef mimari için DUMPBIN sürümleri Visual Studio'ya eklenir.

Örnek

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

Ayrıca bkz.

Pragma yönergeleri ve __pragma ve _Pragma anahtar sözcükleri