Symptomer
Du bruker alternativet for /Ot (gjestene raskt Code) kompilator når du bygger et program som er konfigurert på x64 plattformen i Microsoft Visual Studio 2005 Service Pack 1 (SP1). Når du kjører programmet, kanskje noen Hvis -setninger på feil måte. Derfor er resultatene uforutsigbare. Hvis du for eksempel vil Hvis -setninger kan bli hoppet over i den genererte koden av programmet.
Dette problemet oppstår bare i følgende scenario.
-
Det finnes noen MOV instruksjoner mellom to Sammenlign-operasjoner.
-
Disse sammenligne operasjoner Bruk samme operandene.
-
Verdiene for operandene er endret av MOV-instruksjoner.
I dette tilfellet Hvis -setninger i den andre Sammenlign-operasjonen kan bli hoppet over.
Notater
-
Dette problemet kan også oppstå når du bruker alternativet /O2 eller det /Ox for å utvikle programmet.
-
Dette problemet oppstår ikke på x86 plattform.
Årsak
Dette problemet oppstår fordi at kompilatoren optimalisering feilaktig antar at flagget som er angitt av XOR-operasjonen kan brukes uten å inkludere en Sammenlign-operasjon.
Løsning
Informasjon om hurtigreparasjon
En støttet hurtigreparasjon er tilgjengelig fra Microsoft. Denne hurtigreparasjonen er imidlertid ment å løse problemet som er beskrevet i denne artikkelen. Bruk denne hurtigreparasjonen bare på systemer som har problemet som er beskrevet i denne artikkelen. Denne hurtigreparasjonen kan gjennomgå ytterligere testing. Hvis du ikke er alvorlig påvirket av dette problemet, anbefaler vi derfor at du venter på neste programvareoppdatering som inneholder denne hurtigreparasjonen.
Hvis hurtigreparasjonen er tilgjengelig for nedlasting, ligger den under delen "Hotfix Download Available" øverst i denne Knowledge Base-artikkelen. Hvis denne delen ikke vises, kan du kontakte Microsofts kundeservice og kundestøtte for å få hurtigreparasjonen.
Obs! Hvis det oppstår andre problemer, eller hvis feilsøkingstips, må du kanskje opprette en separat forespørsel om. Vanlige kundestøttekostnader gjelder for ytterligere kundestøttespørsmål og problemer som ikke dekkes av denne oppdateringen. For en fullstendig liste over telefonnumre for Microsofts kundeservice og kundestøtte eller opprette en separat forespørsel om, kan du gå til følgende Microsoft-webområde:
http://support.microsoft.com/contactus/?ws=supportObs! Hotfix Download Available-skjemaet viser språkene som hurtigreparasjonen er tilgjengelig på. Hvis du ikke ser språket ditt, er det fordi en hurtigreparasjon ikke er tilgjengelig for dette språket.
Forutsetninger
Du må ha for Visual Studio 2005 SP-1 installert for å bruke denne hurtigreparasjonen.
Krav om omstart
Du trenger ikke å starte datamaskinen på nytt etter at du har installert denne hurtigreparasjonen.
Informasjon om erstatning av hurtigreparasjoner
Denne hurtigreparasjonen erstatter ikke andre hurtigreparasjoner.
Filinformasjon
Den engelskspråklige versjonen av denne hurtigreparasjonen har filattributtene (eller senere filattributter) som er oppført i følgende tabell. Datoene og klokkeslettene for disse filene er oppført i Coordinated Universal Time (UTC). Når du viser filinformasjonen, konverteres den til lokal tid. Hvis du vil finne forskjellen mellom UTC og lokal tid, kan du bruke kategorien tidssone under dato og klokkeslett i Kontrollpanel.
Filnavn |
Filversjon |
Filstørrelse |
Dato |
Tid |
Plattform |
---|---|---|---|---|---|
C2.dll |
14.0.50727.3080 |
2,273,280 |
19 november 2008 |
18:52 |
x86 |
C2.dll |
14.0.50727.3080 |
7,192,576 |
19 november 2008 |
23:25 |
IA-64 |
C2.dll |
14.0.50727.3080 |
2,490,368 |
19 november 2008 |
23:26 |
x86 |
C2.dll |
14.0.50727.3080 |
3,600,384 |
19 november 2008 |
23:33 |
x64 |
C2.dll |
14.0.50727.3080 |
2,203,648 |
19 november 2008 |
23:33 |
x86 |
Løsning
Hvis du vil omgå dette problemet, bruker du én av følgende metoder:
-
Bruke nøkkelordet midlertidig når du deklarerer variabler som brukes i Hvis -setninger.
-
Deaktiver alternativet for optimalisering hastighet. For eksempel erstatte /Ot alternativet med alternativet /Os (liten favør-kode) . Eller bruke alternativet /O1 i stedet for den /O2 eller /Ox .
-
Legge til en linje med kode før Hvis -setninger i andre sammenligner operasjonen. Hvis du for eksempel legge til en printf -setning.
Status
Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".
Hvis du vil ha mer informasjon
For mer informasjon om koden for én eller flere setninger kan kjøre på feil måte når du bruker funksjonen for optimalisering for kode i Visual Studio 2005, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:
925792 én eller flere setninger i koden kjører kanskje ikke riktig når du bruker funksjonen for optimalisering for kode i Visual Studio 2005
Hvis du vil ha mer informasjon om terminologi for programvareoppdatering, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:
824684 beskrivelse av standardterminologien som brukes til å beskrive oppdateringer av Microsoft-programvare