FIX: Per un'istruzione "switch" in Visual C++ 2010 x 64 del compilatore viene generato codice macchina non corretto

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

In questa pagina

Sintomi

Si supponga di compilare un file di codice sorgente C o C++ in un file binario x64 utilizzando il compilatore di Visual C/C++ (Cl.exe) in Microsoft Visual Studio 2010. File di codice sorgente contiene una funzione che utilizza un'istruzione switch . In questo caso, codice macchina non corretto può essere generato per l'istruzione switch se sono vere le seguenti condizioni:
  • È attivata l'opzione del compilatore di OB1 (Only_inline).
  • Le schede /O1 (Riduci dimensione), /O2 (Ottimizza velocità), Ox (Full Optimization) o opzione del compilatore di ottimizzazione /Og (ottimizzazioni globali) è attivata.
  • L'opzione del compilatore /GL (Whole Program Optimization) è disattivato.

Risoluzione

Informazioni sull'hotfix

Un hotfix supportato è disponibile da Microsoft. Tuttavia è destinato esclusivamente alla risoluzione il problema descritto in questo articolo. Applicarlo solo ai sistemi in cui si verificano questo problema specifico.

Per risolvere il problema, contattare il Servizio supporto tecnico clienti Microsoft per ottenere l'hotfix. Per un elenco completo di numeri di telefono del servizio supporto tecnico clienti Microsoft e informazioni sui costi dell'assistenza, visitare il seguente sito Web Microsoft:
http://support.microsoft.com/contactus/?ws=support
Nota. In casi particolari, le spese normalmente addebitate per le chiamate al supporto tecnico potrebbero essere annullate qualora un addetto del supporto Microsoft determina che uno specifico aggiornamento risolverà il problema. I costi di supporto normale verranno applicati per eventuali ulteriori domande e problemi che non dovessero rientrare nello specifico aggiornamento in questione.

Prerequisiti

Per applicare questo hotfix, è necessario disporre di Visual Studio 2010 Service Pack 1 (SP1) installato.

Richiesta di riavvio

Non è necessario riavviare il computer dopo avere applicato questo hotfix se non vengono utilizzati i file interessati. Si consiglia di chiudere componenti di Visual Studio 2010 prima di applicare questo hotfix.

Informazioni sui file

La versione globale di questo hotfix presenta gli attributi di file (o attributi successivi) elencati nella tabella riportata di seguito. Le date e ore dei file sono elencate nel tempo universale coordinato (UTC). Quando si visualizzano le informazioni sul file, viene convertito in ora locale. Per calcolare la differenza tra ora UTC e ora locale, utilizzare il Fuso orario scheda di Data e ora elemento nel Pannello di controllo.
Riduci l'immagineEspandi l'immagine
assets folding start collapsed
Riduci questa tabellaEspandi questa tabella
Nome del fileVersione del fileDimensione del fileDataOraPiattaformaPercorso
C2. dll16.0.40219.4442,606,71211-Mar-201319:24x86Microsoft Visual Studio 10.0\VC\bin
C2. dll16.0.40219.4442,493,56012-Mar-201316:48x86Microsoft Visual Studio 10.0\VC\bin\x86_amd64
C2. dll16.0.40219.4442,593,92812-Mar-201316:48x86Microsoft Visual Studio 10.0\VC\bin\x86_ia64
C2. dll16.0.40219.4442,960,50412-Mar-201316:48x64Microsoft Visual Studio 10.0\VC\bin\amd64
Riduci l'immagineEspandi l'immagine
assets folding end collapsed

Informazioni

Per riprodurre il problema, creare un file di origine C o C++ che contiene il codice riportato di seguito:

#include <stdio.h>

int test(int bps, int sflags)
{
    if (sflags & (1 << bps))
    {
        switch (bps)
        {
        case 1:  return 1;
        case 2:  return 3;
        default: return 0;
        }
    }
    else
    {
        switch (bps)
        {
        case 1:  return 2;
        default: return 0;
        }
    }
}
 
void main()
{
    int res = test(1, -1);
    printf("%d\n", res);
}


Quindi, aprire il prompt dei comandi di strumenti tra Visual Studio x64 o prompt dei comandi di Visual Studio x64 Win64 in Visual Studio 2010 e compilare il file di origine utilizzando il comando riportato di seguito:
cl /Ob1 /O2 'Percorso del File di origine'

Il risultato previsto è 1. Tuttavia, il risultato effettivo è 0.

Status

Microsoft ha confermato che questo è un problema nei prodotti Microsoft elencati nella sezione "Si applica a".

Riferimenti

Per ulteriori informazioni sull'opzione del compilatore OB , visitare il seguente sito Web MSDN:
Informazioni generali sull'opzione del compilatore OB
Per ulteriori informazioni sull'opzione del compilatore /GL , visitare il seguente sito Web MSDN:
Informazioni generali sull'opzione del compilatore /GL
Per ulteriori informazioni sulle opzioni di ottimizzazione /O , visitare il seguente sito Web MSDN:
Informazioni generali sulle opzioni /O (Ottimizza codice)

Proprietà

Identificativo articolo: 2802711 - Ultima modifica: venerdì 29 marzo 2013 - Revisione: 3.0
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual Studio 2010 Service Pack 1
  • Microsoft Visual Studio 2010 Ultimate
  • Microsoft Visual Studio 2010 Professional
  • Microsoft Visual Studio 2010 Premium with MSDN
Chiavi: 
kbqfe kbhotfixserver kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 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: 2802711
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.

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