Condividi tramite


Compilatori per progetti per Smart Device

Aggiornamento: novembre 2007

Visual Studio include i compilatori indicati di seguito per i microprocessori utilizzati nei dispositivi Smart Device:

  • Compilatore C/C++ a 32 bit utilizzato per la compilazione e il collegamento di programmi ARM C e C++ a 32 bit.

  • Compilatore C/C++ a 32 bit utilizzato per la compilazione e il collegamento di programmi Renesas SH-4 C e C++ a 32 bit.

  • Compilatore C/C++ utilizzato per la compilazione e il collegamento di programmi MIPS16, MIPS32, MIPS64 C e C++.

I compilatori producono file oggetto in formato file oggetto comune (COFF, Common Object File Format). I programmi di compilazione compilano ogni file di origine e, se non diversamente specificato, un oggetto per ciascuna compilazione. All'interno dei compilatori sono incluse le opzioni elencate nella riga di comando (CL), nella variabile di ambiente CL e nei file di risposta specificati.

Differenze dei compilatori di Visual Studio tra desktop e dispositivi

Differenza

Descrizione

Scheda Avanzate, elenco a discesa Compila per architettura.

In Proprietà progetto, scheda Avanzate, elenco a discesa Compila per architettura nel nodo C/C++ per i progetti per dispositivi sono disponibili le seguenti opzioni: Arm4 (/QRarch4), ARM5 (/QRarch5), Arm4t (/QRarch4t), ARM5t (/QRarch5t).

Scheda Avanzate, elenco a discesa Chiamate ARM e ARM Thumb di interconnessione.

In Proprietà progetto, scheda Avanzate, elenco a discesa Chiamate ARM e ARM Thumb di interconnessione nel nodo C/C++ per i progetti per dispositivi sono disponibili le seguenti opzioni: Sì (/QRInterwork-return) e No. Quando l'impostazione è Sì, il compilatore genera codice thunk per l'interconnessione di codice ARM a 16 e 32 bit.

Scheda Avanzate, elenco a discesa Attiva emulazione virgola mobile.

In Proprietà progetto, scheda Avanzate, elenco a discesa Attiva emulazione virgola mobile nel nodo C/C++ per i progetti per dispositivi sono disponibili le seguenti opzioni: Sì e No. Quando l'impostazione è Sì, il compilatore consente l'emulazione delle operazioni a virgola mobile.

Scheda Preprocessore, casella di input Definizioni peril preprocessore.

In Proprietà progetto, scheda Preprocessore, casella di input Definizioni per ilprocessore del nodo C/C++, per i progetti per dispositivi sono disponibili la casella di controllo Eredita da padre o da impostazioni predefinite progetto e il pulsante Macro per l'aggiunta di macro.

Scheda Ottimizzazione, elenco a discesa DefinizioniUniformità virgola mobile.

In Proprietà progetto, scheda Ottimizzazione, elenco a discesa DefinizioniUniformità virgola mobile nel nodo C/C++ per i progetti per dispositivi è possibile selezionare Uniformità predefinita o Migliora uniformità (/Op).

Per ulteriori informazioni, vedere Opzioni del compilatore elencate in ordine alfabetico.

Modifiche rispetto alle versioni precedenti di Visual Studio

Modifiche dei compilatori da Visual Studio 2003 a Visual Studio 2005

Poiché i compilatori per dispositivi sono basati sul compilatore Visual C++ per computer desktop, l'esame delle differenze tra le diverse versioni dei compilatori desktop consente di conoscere i cambiamenti intercorsi tra i compilatori per dispositivi eMbedded Visual C++ e quelli Visual Studio 2005. Per informazioni sulle modifiche tra Visual Studio 6.0 e Visual Studio 2003, vedere Compatibility and Compliance Issues in Visual C++.

Nella tabella riportata di seguito viene fornito un riepilogo dei cambiamenti dei compilatori tra Visual Studio 2003 e Visual Studio 2005.

Problema

Descrizione

Il puntatore ai membri richiede adesso un nome completo, l'operatore address-of (&) e le parentesi nelle chiamate di funzione.

Il codice scritto per le versioni precedenti del compilatore nelle quali veniva utilizzato solo il nome del metodo genera ora l'errore del compilatore C3867 oppure l'avviso del compilatore C4867. Questo messaggio diagnostico è richiesto dallo standard ISO C++. Per creare un puntatore a una funzione membro, è necessario utilizzare l'operatore address-of (&) e il nome completo del metodo. Se non vengono richiesti l'operatore & e il nome completo del metodo oppure nel caso in cui manchino le parentesi nella chiamate di funzione, potrebbero verificarsi errori. Se si utilizza il nome della funzione senza un elenco di argomenti, il puntatore a funzione risultante può essere convertito in tipi diversi. Pertanto, è possibile che in fase di esecuzione si verifichi un comportamento non previsto.

È necessario garantire alla dichiarazione friend l'accesso a una classe.

Nei compilatori Visual C++ precedenti era possibile attivare una dichiarazione friend per una classe non accessibile nell'ambito della classe contenente la dichiarazione. Nella stessa situazione, in Visual C++ 2005 il compilatore genererà l'errore del compilatore C2248. Per risolvere l'errore, modificare l'accessibilità della classe specificata nella dichiarazione friend. Questa modifica è stata apportata in conformità allo standard ISO C++.

La specializzazione esplicita non è consentita come costruttore di copia e operatore di assegnazione di copia.

Il codice che dipende dalla specializzazione esplicita dei modelli per un costruttore di copia o un operatore di assegnazione di copia genererà l'errore del compilatore C2299. Lo standard ISO C++ non consente questo utilizzo. Questa modifica è stata effettuata per motivi di conformità allo scopo di migliorare la portabilità del codice.

I modelli di classe non specializzati non possono essere utilizzati come argomenti di template in un elenco di classi di base.

L'utilizzo di un nome di classe template non specializzato nell'elenco di classi di base relativo a una definizione di classe genera l'errore del compilatore C3203. L'utilizzo di un nome di classe template non specializzato come parametro di template in un elenco di classi di base non è valido. Se il nome di classe template viene utilizzato come parametro di template in un elenco di classi di base, è necessario aggiungervi in modo esplicito i parametri del tipo di template. Questa modifica è stata effettuata per motivi di conformità e per migliorare la portabilità del codice.

Le dichiarazioni using di tipo nidificato non sono più consentite.

Il codice che presenta una dichiarazione using di tipo nidificato genererà l'errore del compilatore C2885. Per risolvere questo errore, è necessario utilizzare riferimenti completi ai tipi nidificati, inserire il tipo in uno spazio dei nomi oppure creare un elemento typedef. Questa modifica è stata effettuata per motivi di conformità allo scopo di migliorare la portabilità del codice.

L'opzione del compilatore /YX è stata rimossa.

L'opzione del compilatore /YX generava il supporto di intestazioni precompilate automatiche ed era utilizzata per impostazione predefinita dall'ambiente di sviluppo. Se si rimuove l'opzione del compilatore /YX dalle configurazioni della build, è possibile ottenere compilazioni più rapide. Oltre ai problemi relativi alle prestazioni, l'opzione del compilatore /YX può provocare un comportamento imprevisto in fase di esecuzione. È preferibile utilizzare /Yc, Crea File di intestazione precompilato e /Yu,Usa File di intestazione precompilato, in modo da disporre di maggiore controllo sulle modalità di utilizzo delle intestazioni precompilate.

Le opzioni del compilatore /Oa e /Ow sono state rimosse.

Le opzioni del compilatore /Oa e /Ow sono state rimosse e saranno ignorate. Utilizzare il modificatore noalias o restrictdeclspec per specificare il modo in cui il compilatore utilizza gli alias.

L'opzione del compilatore /Op è stata rimossa.

L'opzione del compilatore /Opè stata rimossa. In sostituzione, è possibile utilizzare /fp:precise.

Le opzioni del compilatore /ML e /MLdsono state rimosse.

In Visual C++ 2005 non è più fornito il supporto delle librerie CRT a thread singolo collegate in modo statico. In sostituzione, è possibile utilizzare /MT e /MTd.

Le opzioni del compilatore /G3, /G4, /G5, /G6, /G7 e /GBsono state rimosse.

Attualmente il compilatore utilizza un modello misto in base al quale viene eseguito un tentativo di creare il file di output migliore per tutte le architetture.

L'opzione del compilatore /Gf è stata rimossa.

In sostituzione, è possibile utilizzare /GF. Mediante l'opzione /GF le stringhe condivise vengono inserite in una sezione in sola lettura, più sicura rispetto alla sezione scrivibile in cui venivano aggiunte mediante l'opzione /Gf.

L'opzione del compilatore /GS è attiva per impostazione predefinita.

Il controllo dell'overflow è attivo per impostazione predefinita. È possibile disattivare il controllo del sovraccarico del buffer con l'opzione del compilatore /GS-.

La variabile /Zc:wchar_t è attiva per impostazione predefinita.

Nel comportamento standard ISO C++, una variabile wchar_t utilizzerà per impostazione predefinita il tipo incorporato invece di un valore short integer senza segno. Questa modifica compromette la compatibilità binaria se il codice client è collegato a librerie compilate senza /Zc:wchar_t. Per tornare al comportamento precedente, non standard, è possibile utilizzare /Zc:wchar_t-. Questa modifica è stata introdotta per creare un codice conforme per impostazione predefinita.

La variabile /Zc:forScope è attiva per impostazione predefinita.

In base al comportamento standard ISO C++, il codice che dipende dall'utilizzo di una variabile dichiarata in un ciclo for dopo il termine dell'ambito del ciclo for non viene compilato. Per tornare al comportamento precedente, non standard, è possibile utilizzare /Zc:forScope. Questa modifica è stata introdotta per creare un codice conforme per impostazione predefinita.

Applicazione del controllo dei parametri per gli attributi Visual C++.

Il codice che passa attributi denominati al costruttore di attributo utilizzando le virgolette quando non si tratta di una stringa e non utilizzandole quando si tratta di una stringa genererà l'errore del compilatore C2065 oppure l'avviso del compilatore (livello 1) C4581. In precedenza, tutti gli attributi del compilatore venivano analizzati come stringhe e, se necessario, le virgolette mancanti venivano inserite dal compilatore. Il supporto degli attributi veniva migliorato mediante l'aggiunta della convalida di controllo dei parametri. Questa modifica impedisce un comportamento imprevisto dovuto al passaggio di argomenti errati a un costruttore di attributo.

Il compilatore non inserirà il tipo int come tipo predefinito nelle dichiarazioni.

Il codice in cui una dichiarazione non presenta il tipo non utilizzerà più int come tipo predefinito. Il compilatore genererà l'avviso del compilatore C4430 oppure l'avviso del compilatore (livello 4) C4431. Lo standard ISO C++ non supporta un tipo int predefinito. Questa modifica consentirà di ottenere il tipo specificato in modo esplicito.

Per ulteriori informazioni, vedere Ultime modifiche al compilatore Visual C++ 2005.

Vedere anche

Altre risorse

Sviluppo di progetti Visual C++ per dispositivi