การแก้ไข: สร้างรหัสของเครื่องจักรไม่ถูกต้องสำหรับคำสั่ง "สวิตช์" ใน 2010 Visual C++ x 64 คอมไพเลอร์

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 2802711 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

อาการ

สมมติว่า คุณต้องคอมไพล์ C หรือ c ++รหัสแฟ้มแหล่งที่มากับแฟ้มไบนารีใช้ x64 โดยใช้ Visual C/c ++คอมไพเลอร์ (Cl.exe) ใน Microsoft Visual Studio 2010 แฟ้มโค้ดต้นฉบับประกอบด้วยฟังก์ชันที่ใช้คำสั่งสลับ ในสถานการณ์นี้ รหัสเครื่องจักรไม่ถูกต้องอาจถูกสร้างขึ้นสำหรับคำสั่งสลับหากมีเงื่อนไขต่อไปนี้:
  • เปิดใช้งานตัวเลือกการคอมไพล์เลอร์1 (Only_inline) /Ob
  • /O1 (ขนาดย่อให้เล็กสุด), /O2 (ความเร็วสูงสุด), /Ox (เต็มประสิทธิภาพสูงสุด), หรือตัวเลือกของคอมไพเลอร์ปรับให้เหมาะสม/Og (สูงสุดที่ส่วนกลาง) ถูกเปิดใช้งาน
  • ตัวเลือกของคอมไพเลอร์/GL (ประสิทธิภาพสูงทั้งโปรแกรมสุด) ถูกปิดใช้งาน

การแก้ไข

ข้อมูลโปรแกรมแก้ไขด่วน

สามารถโหลดโปรแกรมแก้ไขด่วนจาก Microsoft ได้แล้ว อย่างไรก็ตาม นั้นมุ่งหวังเพื่อการแก้ไขปัญหาที่อธิบายในบทความนี้เท่านั้น ใช้กับระบบที่พบปัญหานี้เท่านั้น

เมื่อต้องการแก้ไขปัญหานี้ ให้ติดต่อฝ่ายบริการสนับสนุนลูกค้าของ Microsoft เพื่อขอรับโปรแกรมแก้ไขด่วน สำหรับรายการทั้งหมดของหมายเลขโทรศัพท์ของบริการสนับสนุนลูกค้าของ Microsoft และข้อมูลเกี่ยวกับต้นทุนสนับสนุน แวะไปที่เว็บไซต์ของ Microsoft ต่อไปนี้:
http://support.microsoft.com/contactus/?ws=support
หมายเหตุ ในบางกรณี ค่าธรรมเนียมค่าใช้จ่ายสำหรับการสนับสนุนอาจสามารถยกเลิกได้ถ้า Microsoft Support Professional พบว่าการปรับปรุงเฉพาะจะสามารถแก้ปัญหาของคุณได้ ค่าใช้จ่ายในการสนับสนุนปกติจะมีผลกับคำถามการสนับสนุนเพิ่มเติมและปัญหาที่ไม่สามารถจัดเฉพาะเจาะจงในการปรับปรุง

ข้อกำหนดเบื้องต้น

เมื่อต้องการใช้โปรแกรมแก้ไขด่วนนี้ คุณต้องมี Visual Studio 2010 Service Pack 1 (SP1) ติดตั้งอยู่

ความต้องการสำหัรับการเริ่มระบบใหม่

คุณไม่ต้องรีสตาร์ทคอมพิวเตอร์หลังจากที่คุณใช้โปรแกรมแก้ไขด่วนนี้ถ้าไม่ได้ใช้แฟ้มได้รับผลกระทบ เราขอแนะนำให้ คุณปิดคอมโพเนนต์ที่เกี่ยวข้องกับ 2010 Studio ภาพก่อนที่คุณใช้โปรแกรมแก้ไขด่วนนี้

ข้อมูลแฟ้ม

รุ่นสากลของโปรแกรมแก้ไขด่วนนี้มีแอตทริบิวต์แฟ้ม (หรือแอตทริบิวต์ของแฟ้มรุ่นที่ใหม่กว่า) ซึ่งแสดงอยู่ในตารางต่อไปนี้ วันและเวลาสำหรับแฟ้มเหล่านี้จะแสดงรายการในรูปแบบเวลามาตรฐานสากล (UTC) เมื่อคุณดูข้อมูลแฟ้มข้อมูล จะถูกแปลงเป็นเวลาท้องถิ่น เมื่อต้องการค้นหาความแตกต่างระหว่างเวลา UTC กับเวลาท้องถิ่น ใช้ โซนเวลา ในการ วันและเวลา สินค้าใน'แผงควบคุม'
ยุบรูปภาพนี้ขยายรูปภาพนี้
assets folding start collapsed
ยุบตารางนี้ขยายตารางนี้
$$$$ ชื่อแฟ้มรุ่นของแฟ้มขนาดของแฟ้มวันที่เวลาแพลตฟอร์มเส้นทาง
C2.dll16.0.40219.4442,606,71211 แบบมีนาคม19:24x 8610.0\VC\bin Studio Visual ของ Microsoft
C2.dll16.0.40219.4442,493,56012 แบบมีนาคม16:48x 8610.0\VC\bin\x86_amd64 Studio Visual ของ Microsoft
C2.dll16.0.40219.4442,593,92812 แบบมีนาคม16:48x 8610.0\VC\bin\x86_ia64 Studio Visual ของ Microsoft
C2.dll16.0.40219.4442,960,50412 แบบมีนาคม16:48x 6410.0\VC\bin\amd64 Studio Visual ของ Microsoft
ยุบรูปภาพนี้ขยายรูปภาพนี้
assets folding end collapsed

ข้อมูลเพิ่มเติม

เมื่อต้องการทบทวนเกิดปัญหานี้ สร้าง C หรือ c ++แฟ้มแหล่งที่มาที่ประกอบด้วยรหัสต่อไปนี้:

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


แล้ว เปิดพร้อมท์คำสั่งเครื่องมือที่ไขว้ของ Visual Studio x 64 หรือพรอมต์คำสั่งของ Visual Studio x 64 Win64 ใน 2010 Studio แสดงผล และการคอมไพล์แฟ้มแหล่งมา โดยใช้คำสั่งต่อไปนี้:
cl /Ob1 /O2 'เส้นทางของแฟ้มต้นฉบับ'

ผลลัพธ์คาดไว้คือ1 อย่างไรก็ตาม ผลเกิดขึ้นจริงเป็น0

สถานะ

Microsoft ยืนยันว่า ปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ที่ระบุไว้ในส่วน "นำไปใช้งาน"

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกของคอมไพเลอร์/Obไปเว็บไซต์ MSDN ต่อไปนี้: สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกของคอมไพเลอร์/GLไปเว็บไซต์ MSDN ต่อไปนี้: สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกการปรับให้เหมาะสม/Oไปเว็บไซต์ MSDN ต่อไปนี้:

คุณสมบัติ

หมายเลขบทความ (Article ID): 2802711 - รีวิวครั้งสุดท้าย: 29 มีนาคม 2556 - Revision: 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
Keywords: 
kbqfe kbhotfixserver kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:2802711

ให้ข้อเสนอแนะ

 

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