FIX: Nesprávny strojovom kóde je generovaný pre "prepínač" vyhlásenie v Visual C++ 2010 x 64 kompilátor

Preklady článku Preklady článku
ID článku: 2802711 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

Príznaky

Predpokladajme, že ste zostaviť C alebo C ++ zdrojový kód súboru na 64-bitové binárne súbor pomocou Visual C/C++ kompilátor (Cl.exe) v programe Microsoft Visual Studio 2010. Zdrojový kód súboru obsahuje funkciu, ktorá vyu?íva Prepnúť vyhlásenie. V tejto situácii, nesprávny strojovom kóde môže vyhotoviť pre prepínanie tvrdenie ak sú splnené nasledovné podmienky:
  • /Ob1 (Only_inline) kompilátor je zapnutá.
  • /O1 (minimalizovať veľkosť), /O2 (maximalizovať rýchlosť), /Ox (plné optimalizácia) alebo /Og (globálnej optimalizácie) optimalizácia kompilátor možnosť je zapnutá.
  • /GL (celý Program optimalizácia) kompilátor možnosť je vypnutá.

Riešenie

Informácie o rýchlej oprave

Podporovaná rýchla oprava je teraz k dispozícii od spoločnosti Microsoft. Je však určená iba problém, ktoré popisuje tento článok. Vzťahujú len na systémy, ktoré sú zažíva tento špecifický problém.

Ak chcete vyriešiť tento problém, obráťte sa na služby podpory zákazníkov spoločnosti Microsoft získať rýchlu opravu. Úplný zoznam telefónnych čísiel služby podpory zákazníkov spoločnosti Microsoft a informácie o náklady na technickú podporu, navštívte nasledujúce webovú lokalitu spoločnosti Microsoft:
http://support.Microsoft.com/contactus/?ws=support
Poznámka: V osobitných prípadoch, nemusia účtovať poplatky, ktoré sú telefonickú podporu hovory ak Microsoft podporu Professional určuje, že konkrétna aktualizácia vyrieši váš problém. Obvyklé podporu náklady budú vzťahovať na dodatočnú podporu otázky a otázky, ktoré nespĺňajú kritériá pre konkrétnu aktualizáciu predmetné.

Predpoklady

Ak chcete použiť túto rýchlu opravu, musíte mať Visual Studio 2010 Service Pack 1 (SP1) nainštalované.

Požiadavka na reštartovanie

Nemáte na reštartovanie počítača po inštalácii tejto rýchlej opravy, ak ovplyvnené súbory nie sú používané. Odporúčame, aby ste zatvorili Visual Studio 2010-súvisiace súčasti skôr, než použijete toto rýchla oprava.

Informácie o súboroch

Globálna verzia tejto rýchlej opravy má atribúty súborov (alebo novšie atribúty) uvedené v nasledujúcej tabuľke. Dátumy a časy jednotlivých súborov sú uvedené v univerzálnom svetovom čase (UTC). Keď zobrazíte informácie o súbore, čas sa prevedie na miestny čas. Ak chcete vyhľadať rozdiely medzi časom UTC a miestnym časom, použite Časové pásmo karta Dátum a čas položky v okne Ovládací Panel.
Zbaliť tento obrázokRozbaliť tento obrázok
assets folding start collapsed
Zbaliť túto tabuľkuRozbaliť túto tabuľku
Názov súboruVerzia súboruVeľkosť súboruDátumČasPlatformaCesta
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
Zbaliť tento obrázokRozbaliť tento obrázok
assets folding end collapsed

Ďalšie informácie

Ak chcete reprodukovať tento problém, vytvorte C alebo C ++ zdrojový súbor, ktorý obsahuje nasledujúci kód:

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


Potom otvorte Visual Studio x 64 cez nástroje príkazového riadka alebo Visual Studio x 64 Win64 príkazového riadka v Visual Studio 2010 a skompilovať zdrojový súbor pomocou nasledujúceho príkazu:
cl /Ob1 /O2 "Cesta k súboru zdroja'

Očakávaný výsledok je 1. Avšak, skutočný výsledok je 0.

Stav

Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti „Vzťahuje sa na“.

Odkazy

Ďalšie informácie o /Ob kompilátor možnosť, nájdete na nasledujúcej webovej lokalite MSDN:
Všeobecné informácie o /Ob kompilátor možnosť
Ďalšie informácie o /GL kompilátor možnosť, nájdete na nasledujúcej webovej lokalite MSDN:
Všeobecné informácie o /GL kompilátor možnosť
Ďalšie informácie o možnosti optimalizácie /O , nájdete na nasledujúcej webovej lokalite MSDN:
Všeobecné informácie o /O možnosti (optimalizácia kódu)

Vlastnosti

ID článku: 2802711 - Posledná kontrola: 29. marca 2013 - Revízia: 3.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Visual Studio 2010 Service Pack 1
  • Microsoft Visual Studio 2010 Ultimate
  • Microsoft Visual Studio 2010 Professional
  • Microsoft Visual Studio 2010 Premium with MSDN
Kľúčové slová: 
kbqfe kbhotfixserver kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem: 2802711

Odošlite odozvu

 

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