Momentan sunteți offline, așteptați să vă reconectați la internet

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

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
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: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.
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

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: Pentru mai multe informaţii despre /GL compilator opţiune, du-te la următorul site Web MSDN: Pentru mai multe informaţii despre opţiunile de optimizare /O , du-te la următorul site Web MSDN:

Avertisment: acest articol a fost tradus automat

Proprietăți

ID articol: 2802711 - Ultima examinare: 03/29/2013 08:54:00 - Revizie: 3.0

Microsoft Visual Studio 2010 Service Pack 1, Microsoft Visual Studio 2010 Ultimate, Microsoft Visual Studio 2010 Professional, Microsoft Visual Studio 2010 Premium with MSDN

  • kbqfe kbhotfixserver kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMtro
Feedback