Düzeltme: Yanlış makine kodu Visual C++ 2010 x 64 derleyici "switch" deyimi oluşturulur

Makale çevirileri Makale çevirileri
Makale numarası: 2802711 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

X 64 tabanlı bir ikili dosya için C veya C++ kaynak kodu dosyası Visual C/C++ derleyicisi (CL.exe'nin) Microsoft Visual Studio 2010 kullanarak derleme varsayar. Kaynak kodu dosyası geçiş deyimini kullanan bir işlev içerir. Bu durumda, aşağıdaki koşullar doğruysa yanlış makine kodu için geçiş deyimini oluşturulabilir:
  • /Ob1 (Only_inline) derleyici seçeneği etkinleştirilir.
  • /O1 (boyutu en aza), /O2 (hız en üst düzeye çıkarmak), /Ox (tam en iyileştirme) veya /Og (genel iyileştirmeler) en iyi duruma getirme derleyici seçeneği etkinleştirilir.
  • /GL (tüm programın iyileştirilmesi) derleyici seçeneği devre dışı bırakılır.

Çözüm

Düzeltme bilgileri

Desteklenen bir düzeltme Microsoft'tan edinilebilir. Ancak, bu makalede açıklanan sorunu düzeltmek için tasarlanmıştır. Bu, yalnızca bu sorunla karşılaşan sistemlere uygulayın.

Bu sorunu gidermek için düzeltmeyi edinmek üzere Microsoft Müşteri Destek Hizmetleri'ne başvurun. Microsoft Müşteri Destek Hizmetleri telefon numaralarının ve destek ücretleriyle ilgili bilgi tam listesi için aşağıdaki Microsoft Web sitesini ziyaret edin:
http://support.microsoft.com/contactus/?ws=support
Not Özel durumlarda, Microsoft Destek Uzmanı özel bir güncelleştirmenin sorununuzu belirlerse, normalde destek aramaları için normalde uygulanan ücretler iptal edilebilir. Ek destek sorularına ve söz konusu güncelleştirme için geçerli olmayan sorunlara normal destek ücretleri uygulanır.

Önkoşullar

Bu düzeltmeyi uygulamak için Visual Studio 2010 Service Pack yüklü 1 (SP1) olması gerekir.

Yeniden başlatma gereksinimi

Etkilenen dosyaların değil kullanılıyorsa, bu düzeltmeyi uyguladıktan sonra bilgisayarı yeniden başlatmanız gerekmez. Bu düzeltmeyi uygulamadan önce Visual Studio 2010 ile ilgili bileşenleri kapatmanızı öneririz.

Dosya bilgileri

Bu düzeltmenin genel sürümü dosya özniteliklerine (veya daha yeni dosya özniteliklerine) sahip aşağıdaki tabloda listelenir. Tarihleri ve saatleri bu dosyaların Koordinatlı Evrensel Saat'e (UTC) listelenmiştir. Dosya bilgilerini görüntülediğinizde yerel saate dönüştürülür. UTC ve yerel saat arasındaki farkı bulmak için kullanın. Saat dilimi sekmesinde Tarih ve saat Denetim Masası'ndaki öğe.
Bu resmi kapatBu resmi aç
assets folding start collapsed
Bu tabloyu kapaBu tabloyu aç
Dosya adıDosya sürümüDosya boyutuTarihSaatPlatformYol
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
Bu resmi kapatBu resmi aç
assets folding end collapsed

Daha fazla bilgi

Bu sorunu yeniden oluşturmak için aşağıdaki kodu içeren bir C veya C++ kaynak dosyası oluşturun:

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


Sonra Visual Studio 2010'Visual Studio x 64 Çapraz Araçlar komut istemi veya Visual Studio x 64 Win64 komut istemi açın ve aşağıdaki komutu kullanarak kaynak dosyasını derleyin:
cl /Ob1 /O2 'Kaynak dosya yolu'

Beklenen sonuç 1olur. Ancak, asıl sonuç 0' dır.

Durum

Microsoft bu sorunun, "Aşağıdakilere uygulanır" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.

Referanslar

/Ob derleyici seçeneği hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesine gidin:
/Ob derleyici seçeneği hakkında genel bilgiler
/GL derleyici seçeneği hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesine gidin:
/GL derleyici seçeneği hakkında genel bilgiler
/O en iyileştirme seçenekleri hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesine gidin:
/O seçenekler hakkında genel bilgiler (kodu en iyi duruma getir)

Özellikler

Makale numarası: 2802711 - Last Review: 29 Mart 2013 Cuma - Gözden geçirme: 3.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Studio 2010 Service Pack 1
  • Microsoft Visual Studio 2010 Ultimate
  • Microsoft Visual Studio 2010 Professional
  • Microsoft Visual Studio 2010 Premium with MSDN
Anahtar Kelimeler: 
kbqfe kbhotfixserver kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir: 2802711

Geri Bildirim Ver

 

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