HOW TO: Utilizzare # pragma init_seg per creazione statici di controllo

Traduzione articoli Traduzione articoli
Identificativo articolo: 104248 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Nel compilatore Microsoft c ++, Ŕ possibile al controllo quando gli oggetti statici, dichiarati in ambito file, sono creati ed eliminati utilizzando la direttiva del preprocessore di #pragama init_seg.

ULTERIORI INFORMAZIONI

Esistono quattro opzioni per la direttiva del preprocessore init_seg: del compilatore, lib, utente e "user_defined_segment_name." Nel codice sorgente, questa direttiva potrebbe avere la forma:
   #pragma init_seg(compiler)
   #pragma init_seg(lib)
   #pragma init_seg(user)
   #pragma init_seg("user_defined_segment_name")
				
Nota: solo una direttiva di init_seg pu˛ essere visualizzati in un unico file sorgente. In caso contrario, il compilatore genera "Errore C2356: segmento di inizializzazione non deve cambiare durante la conversione unitÓ."

Lo scopo di questa direttiva Ŕ per consentire allo sviluppatore per raggruppare i costruttori in un'applicazione. Questo potrebbe essere utile se alcuni oggetti Ŕ ritenuto l'esistenza di altri oggetti per il corretto funzionamento. Gli oggetti sono raggruppati tra loro utilizzando # pragma init_seg(compiler) vengono creati prima di tutti gli altri oggetti ed eliminati dopo tutti gli altri oggetti nell'applicazione. Viene utilizzato per gli oggetti le librerie di runtime. Ad esempio, poichÚ il cin e cout pu˛ o potrebbe non essere costruiti ancora, utilizzando questi oggetti nel costruttore o distruttore che utilizza il init_seg(compiler) # pragma sarÓ invece consigliabile.

Gli oggetti sono raggruppati tra loro utilizzando # pragma init_seg(lib) vengono costruiti dopo ed eliminati prima gli oggetti nei moduli compilati con # pragma init_seg(compiler), ma prima di tutti gli altri oggetti nell'applicazione. Gli oggetti sono raggruppati tra loro utilizzando # pragma init_seg(user) vengono costruiti dopo ed eliminati prima gli oggetti nei moduli compilati con # pragma init_seg(compiler) e init_seg(lib) # pragma. In altre parole, gli oggetti del sono raggruppati tra loro utilizzando # pragma init_seg(user) vengono costruiti ed eliminati contemporaneamente tutti gli altri oggetti statici che non sono state raggruppate utilizzando # pragma init_seg.

La documentazione non Ŕ completamente chiara su questo punto. Indicato che gli oggetti gruppo utenti vengono costruiti ultima. Ci˛ significa che tali oggetti vengono creati dopo ed eliminati prima i gruppi del compilatore e lib. Uno dei metodi che Ŕ possibile controllare l'ordine di creazione e distruzione all'interno di ogni gruppo consiste nel modificare l'ordine di collegamento. I moduli visualizzati precedente nella riga del collegamento verranno creati dopo ed eliminati prima i moduli visualizzati in un secondo momento nella riga del collegamento nello stesso gruppo init_seg. I costruttori sono denominati in ordine inverso di in segmenti l'aspetto.

╚ importante tenere presente che il linguaggio c ++ non garantisce un ordine di costruzione per gli oggetti nonderived, il linguaggio c ++ garantisce che tali oggetti verranno creati e che le classi base verranno create prima le classi che derivano da essi.

La direttiva del preprocessore init_seg("user_defined_segment_name") di # pragma inserisce gli indirizzi dei costruttori in segmento logico "user_defined_segment_name". Questa opzione Ŕ utile solo se si modifica il codice di avvio per chiamare i costruttori.

Nell'esempio di codice seguente (quattro file di origine) viene illustrato le idee precedente. Dopo aver compilato tutti i file di origine, Ŕ possibile collegarle nei due modi illustrato di seguito ed eseguire gli eseguibili risultanti. Le opzioni di init_seg dipendono dall'ordine dei collegamenti e che non sono, verrÓ visualizzato l'output di ciascuna.

Con le versioni di Visual c ++ 32-bit Edition, utilizzare:
   link file1 file2 file3 file4 /out:demo1.exe
   link file4 file3 file2 file1 /out:demo2.exe
				
versioni con Visual c ++ 16 bit, utilizzare:
   link file1 file2 file3 file4, demo1;
   link file4 file3 file2 file1, demo2;
				

Codice di esempio

// 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(){}
				

ProprietÓ

Identificativo articolo: 104248 - Ultima modifica: martedý 5 luglio 2005 - Revisione: 3.1
Le informazioni in questo articolo si applicano a:
  • 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
Chiavi:á
kbmt kbcode kbhowto kbhowtomaster kblangcpp KB104248 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 104248
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilitÓ per articoli della Microsoft Knowledge Base su prodotti non pi¨ supportati
Questo articolo Ŕ stato scritto sui prodotti per cui Microsoft non offre pi¨ supporto. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com