FIX: Codul mașină incorect este generat pentru o declarație de "switch" din Visual C++ 2010 x 64 compilator

Traduceri articole Traduceri articole
ID articol: 2802711 - View products that this article applies to.
Măriți totul | Reduceți totul

În această pagină

Simptome

Să presupunem că vă compilați un fișier C sau C++ de cod sursă la un fisier binar x 64-bază folosind Visual C/C++ compilator (Cl.exe) în Microsoft Visual Studio 2010. Fișier de cod sursă conține o funcție care utilizează un switch declarație. În această situație, codul mașină incorect pot fi generate declarație comuta dacă următoarele condiții sunt adevărate:
  • /Ob1 (Only_inline) compilator opțiune este activată.
  • /O1 (minimum Size), /O2 (maximiza viteza), /Ox (plin de optimizare) sau /Og (Global optimizări) optimizare compilator opțiune este activată.
  • /GL (optimizare Program întreg) compilator opțiunea este dezactivată.

Rezoluție

Informații despre remedierea rapidă

O remediere rapidă este acum disponibilă de la Microsoft. Cu toate acestea, acesta este destinat pentru a corecta numai problema descrisă în acest articol. Aplicați-l numai pe sistemele care întâmpină această problemă anume.

Pentru a rezolva această problemă, contactați Serviciile de asistență pentru clienți Microsoft pentru a obține remedierea rapidă. Pentru o listă completă de numere de telefon serviciilor de asistență pentru clienți Microsoft și informații despre costurile de asistență, vizitați următorul site Web Microsoft:
http://support.Microsoft.com/contactus/?ws=support
Notă În cazuri speciale, costurile de obicei pentru apelurile de asistență pot fi revocate dacă un profesionist de suport Microsoft stabilește că o anumită actualizare va rezolva problema. Costurile uzuale de asistență se vor aplica pentru întrebări suplimentare de asistență și pentru probleme ce nu fac obiectul actualizării în chestiune.

Cerințe preliminare

Pentru a aplica această remediere rapidă, trebuie să aveți Visual Studio 2010 pachet Service Pack 1 (SP1 instalate).

Informații cu privire la necesitatea unui restart

Nu trebuie să reporniți computerul după aplicarea acestei remedieri rapide dacă fișierele afectate nu sunt utilizate. Vă recomandăm să închideți componente legate de Visual Studio 2010 înainte de a aplica această remediere rapidă.

Informații cu privire la fișiere

Versiunea globală a acestei remedieri rapide are atributele de fișier (sau atribute de fișier mai târziu) enumerate în următorul tabel. Datele și orele acestor fișiere sunt prezentate în ora universală (UTC). Când vizualizați informațiile despre fișiere, este convertit la ora locală. Pentru a afla diferența între UTC și ora locală, utilizați Fusul orar fila în Data și ora element din Panou de control.
Reduceți imagineaMăriți imaginea
assets folding start collapsed
Reduceți tabelulMăriți tabelul
Nume de fi?ierVersiunea fișieruluiDimensiune fi?ierDatamarcă de timpPlatformaCalea
C2.dll16.0.40219.4442,606,71211-Mar-201319:24x 86Microsoft Visual Studio 10.0\VC\bin
C2.dll16.0.40219.4442,493,56012-Mar-201316:48x 86Microsoft Visual Studio 10.0\VC\bin\x86_amd64
C2.dll16.0.40219.4442,593,92812-Mar-201316:48x 86Microsoft Visual Studio 10.0\VC\bin\x86_ia64
C2.dll16.0.40219.4442,960,50412-Mar-201316:48x 64Microsoft Visual Studio 10.0\VC\bin\amd64
Reduceți imagineaMăriți imaginea
assets folding end collapsed

Informații suplimentare

Pentru a reproduce această problemă, creați un fișier sursă C sau C++, care conține codul de următoarele:

#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);
}


Apoi, deschide Visual Studio x 64 cruce unealtă Virgulă Prompt sau Visual Studio x 64 Win64 Command Prompt în Visual Studio 2010, și compilați fișierul sursă utilizând următoarea comandă:
cl /Ob1 /O2 'Calea de fișier sursă'

Rezultatul așteptat este 1. Cu toate acestea, rezultatul real este 0.

Stare

Microsoft a confirmat că aceasta este o problemă asociată cu produsele Microsoft enumerate în secțiunea „se aplică la".

Referințe

Pentru mai multe informații despre /Ob compilator opțiune, du-te la următorul site Web MSDN:
Informații generale despre opțiunea de compilator /Ob
Pentru mai multe informații despre /GL compilator opțiune, du-te la următorul site Web MSDN:
Informații generale despre opțiunea de compilator /GL
Pentru mai multe informații despre opțiunile de optimizare /O , du-te la următorul site Web MSDN:
Informații generale despre /O opțiuni (optimiza cod)

Proprietă?i

ID articol: 2802711 - Ultima examinare: 29 martie 2013 - Revizie: 3.0
Se aplică la:
  • Microsoft Visual Studio 2010 Service Pack 1
  • Microsoft Visual Studio 2010 Ultimate
  • Microsoft Visual Studio 2010 Professional
  • Microsoft Visual Studio 2010 Premium with MSDN
Cuvinte cheie: 
kbqfe kbhotfixserver kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMtro
Traducere automată
IMPORTANT: Acest articol a fost tradus de software-ul de traducere automată Microsoft, si nu de un traducător. Microsoft vă oferă atât articole traduse de persoane, cât și articole traduse automat, astfel incat aveti access la toate articolele din Baza noastră de informatii în limba dvs. materna. Totuși, un articol tradus automat nu este întotdeauna perfect. Acesta poate conține greșeli de vocabular, sintaxă sau gramatică, la fel cum un vorbitor străin poate face greșeli vorbind limba dvs. materna. Compania Microsoft nu este responsabilă pentru nici o inexactitate, eroare sau daună cauzată de traducerea necorespunzătoare a conținutului sau de utilizarea traducerii necorespunzătoare de către clienții nostri. De asemenea, Microsoft actualizează frecvent software-ul de traducere automată.
Face?i clic aici pentru a vizualiza versiunea în limba engleză a acestui articol: 2802711

Trimite?i feedback

 

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