Makale numarası: 104248 - Son Gözden Geçirme: 05 Temmuz 2005 Salı - Gözden geçirme: 3.1

NASıL YAPıLıR: # Pragma init_seg denetim statik Yapım için kullanın...

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Dosya kapsamında bildirilen nesneleriniz statik yapılandırılan ve #pragama init_seg Önişlemci yönergesi kullanılarak destructed içinde Microsoft C++ Derleyici, denetime olanaklıdır.

Ek bilgi

Init_seg Önişlemci yönergesi için dört seçenek vardır: derleyici lib, kullanıcı ve "user_defined_segment_name." Kaynak kodunda bu yönerge, form yoktur:
   #pragma init_seg(compiler)
   #pragma init_seg(lib)
   #pragma init_seg(user)
   #pragma init_seg("user_defined_segment_name")
				
Not: yalnızca bir init_seg yönergesini tek bir kaynak dosyada görünür. Aksi durumda, derleyici oluşturur "C2356 hata: başlatma kesimi çeviri birimi sırasında değiştirmeniz gerekir."

Geliştirici bir uygulamada Kurucular Grup olanağı vermek amacı, bu yönerge var. Bu, bazı nesneler üzerinde düzgün çalışabilmesi için başka nesneler varlığını güvendi yararlı olacaktır. # Pragma init_seg(compiler) kullanarak Gruplandırılmış nesneleri önce diğer tüm nesnelerin oluşturulması ve sonra diğer uygulamadaki tüm nesnelerin bozdu. Bu çalıştırma zamanı kitaplıkları nesneleri için kullanılır. Örneğin, # Pragma cin cout olabilir ve henüz, bu nesneleri init_seg(compiler) kullanan bir yıkıcı veya kurucu kullanılarak oluşturulması değil çünkü unwise olacaktır.

# Pragma init_seg(lib) kullanarak Gruplandırılmış nesneleri sonra oluşturulur ve önce # Pragma init_seg(compiler) ile derlenmiş modülleri olan nesneler, ancak önce diğer uygulamadaki tüm nesnelerin destructed. # Pragma init_seg(user) kullanarak Gruplandırılmış nesneleri sonra oluşturulur ve # Pragma init_seg(compiler) # Pragma init_seg(lib) ile derlenmiş modülleri olan nesneler önce destructed. Diğer bir deyişle, # Pragma init_seg(user) kullanarak Gruplandırılmış nesneleri oluşturulur ve aynı anda # Pragma init_seg kullanarak gruplandırılmış değil, diğer tüm statik nesnelerin destructed.

Belgelere bu noktasında tümüyle açık değildir. Bu nesneler <a0>kullanıcı</a0> grubundaki son oluşturulur belirtir. Bu, bu nesnelerin sonra oluşturulmuş ve önce derleyici ve lib grupları destructed anlamına gelir. Inşaat ve her gruptaki bozma sırasını denetleyebilirsiniz bir bağlama sırasını değiştirmek için yoludur. Daha önce bağlantı satırda görünen modüller sonra oluşturulur ve aynı init_seg grubundaki daha sonra bağlantı satırda görünen modülleri önce destructed. Kurucular görünümlerini, segmentleri, ters sırada verilir.

C++ dil inşaat nonderived nesneler için herhangi bir sırada garanti unutmayın; bu nesnelerin oluşturulması ve temel sınıfları onlardan türetme yapıp yapmayacağınızı sınıfları önce oluşturulması C++ dil güvence altına alır.

# Pragma init_seg("user_defined_segment_name") Önişlemci yönergesi Kurucular adresleri "user_defined_segment_name" mantıksal kesim yerleştirir. Yalnızca bu Kurucular çağırmak için başlatma kodunu değiştirirseniz, bu seçenek kullanışlıdır.

Aşağıdaki kod örneği (dört kaynak dosyaları), yukarıdaki fikirleri gösterir. Tüm kaynak dosya derleniyor sonra bunları aşağıda belirtilen ve sonuç yürütülebilir dosyaları çalıştırmak iki şekilde bağlayabilirsiniz. Her çıktı init_seg seçenekleri bağlantı siparişinde olduğunu ve hangilerinin olduğunu gösterir.

Visual C++ 32-bit Edition sürümleri kullanın:
   link file1 file2 file3 file4 /out:demo1.exe
   link file4 file3 file2 file1 /out:demo2.exe
				
With Visual C++ 16-bit sürümleri kullanın:
   link file1 file2 file3 file4, demo1;
   link file4 file3 file2 file1, demo2;
				

Örnek kod

// file1.cpp
// command line: cl /c file1.cpp
#pragma init_seg(compiler)
#include<stdio.h>
class MyCompClass
{
public:
      MyCompClass(){ printf("In the ctor of MyCompClass\n");}
      ~MyCompClass(){ printf("In the dtor of MyCompClass\n");}
} MyComp;

// file2.cpp
// command line: cl /c file2.cpp
#pragma init_seg(lib)
#include<iostream.h>
class MyLibClass
{
public:
      MyLibClass(){cout<<"In the ctor of MyLibClass"<<endl;}
      ~MyLibClass(){cout<<"In the dtor of MyLibClass"<<endl;}
} MyLib;

// file3.cpp
// command line: cl /c file3.cpp
#pragma init_seg(user)
#include<iostream.h>
class MyUserClass
{
public:
      MyUserClass(){cout<<"In the ctor of MyUserClass"<<endl;}
      ~MyUserClass(){cout<<"In the dtor of MyUserClass"<<endl;}
} MyUser;

// file4.cpp
// command line: cl /c file4.cpp
#include<iostream.h>
class MyRegularClass
{
public:
      MyRegularClass(){cout<<"In the ctor of MyRegularClass"<<endl;}
      ~MyRegularClass(){cout<<"In the dtor of MyRegularClass"<<endl;}
} MyRegular;

void main(){}
				

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C++ 1.0 Professional Edition
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 1.0 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 5.0 Standard Edition
  • Microsoft Visual C++ 6.0 Service Pack 5
Anahtar Kelimeler: 
kbmt kbcode kbhowto kbhowtomaster kblangcpp KB104248 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:104248  (http://support.microsoft.com/kb/104248/en-us/ )
Retired KB ArticleKullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.