FIX: Visual C++ 2010 x 64 컴파일러 "switch" 문의 대 한 잘못 된 기계어 코드 생성

기술 자료 번역 기술 자료 번역
기술 자료: 2802711 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

현상

Visual C/c + + 컴파일러 (Cl.exe)를 사용 하 여 Microsoft Visual Studio 2010에서 x64 바이너리 파일을 C 또는 c + + 소스 코드 파일을 컴파일하는 가정 합니다. Switch 문을 사용 하는 함수는 소스 코드 파일을 포함 합니다. 이 경우 다음 조건에 해당 하는 경우 switch 문의 대 한 잘못 된 기계어 코드 생성 될 수 있습니다.
  • /Ob1 (Only_inline) 컴파일러 옵션을 사용할 수 있습니다.
  • /O1 (크기 최소화), /O2 (속도 최대화), /Ox (최대 최적화) 또는 /Og (전역 최적화) 최적화 컴파일러 옵션을 사용할 수 있습니다.
  • /GL (전체 프로그램 최적화) 컴파일러 옵션을 사용할 수 없습니다.

해결 방법

핫픽스 정보

지원 되는 핫픽스를 이제 Microsoft에서 사용할 수 있습니다. 그러나이 문서에서 설명 하는 문제를 해결 하려면 사용할 수 있습니다. 이러한 특정 문제가 발생 하는 시스템에만 적용 됩니다.

이 문제를 해결 하려면 핫픽스를 구하려면 Microsoft 고객 기술 지원부에 문의 하십시오. Microsoft 고객 기술 지원부 전화 번호 및 지원 비용에 대 한 정보를 전체 목록은 다음 Microsoft 웹 사이트를 방문 하십시오.
http://support.microsoft.com/contactus/?ws=support
참고 Microsoft 기술 지원 전문가가 특정 업데이트로 문제를 해결할 수 있는지 결정 하는 경우 특수 한 경우에는 지원 요청에 따른 일반적 비용이 취소 될 수도 있습니다. 추가 지원 질문과 특정 업데이트가 문제의 필요 하지 않은 문제 지원 비용이 적용 됩니다.

필수 구성 요소

이 핫픽스를 적용 하려면 Visual Studio 2010 서비스 팩 1 (SP1) 있어야 합니다.

다시 시작 요구사항

영향을 받는 파일을 사용 하는 경우이 핫픽스를 적용 한 후 컴퓨터를 다시 시작 하지 않아도 됩니다. 이 핫픽스를 적용 하기 전에 Visual Studio 2010 관련 구성 요소를 닫는 것이 좋습니다.

파일 정보

이 핫픽스의 글로벌 버전은 파일 특성 (또는 이후의 파일 특성) 있는 다음 표에 나열 된. 이러한 파일의 시간과 날짜는 협정 세계시 (UTC) 로 나열 됩니다. 파일 정보를 볼 때, 로컬 시간으로 변환됩니다. UTC와 로컬 시간의 차이 확인 하려면 사용 하는 표준 시간대 탭에 날짜 및 시간 제어판에서 항목입니다.
그림 축소그림 확대
assets folding start collapsed
표 축소표 확대
파일 이름파일 버전파일 크기날짜시간플랫폼경로
C2.dll16.0.40219.4442,606,71211-3 월-201319:24x 86Microsoft Visual Studio 10.0\VC\bin
C2.dll16.0.40219.4442,493,56012-3 월-201316:48x 86Microsoft Visual Studio 10.0\VC\bin\x86_amd64
C2.dll16.0.40219.4442,593,92812-3 월-201316:48x 86Microsoft Visual Studio 10.0\VC\bin\x86_ia64
C2.dll16.0.40219.4442,960,50412-3 월-201316:48x 64Microsoft Visual Studio 10.0\VC\bin\amd64
그림 축소그림 확대
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 2010의 x64 Visual Studio 교차 도구 명령 프롬프트 또는 Visual Studio x64 Win64 명령 프롬프트를 엽니다 및 다음 명령을 사용 하 여 소스 파일을 컴파일:
cl /Ob1 /O2 '원본 파일 경로'

예상된 결과 1입니다. 그러나 실제 결과 0입니다.

현재 상태

Microsoft는 "적용 대상" 절에 나열된 제품에서 문제가 있음을 확인했습니다.

참조

/Ob 컴파일러 옵션에 대 한 자세한 내용은 다음 MSDN 웹 사이트를 참조 하십시오.
/Ob 컴파일러 옵션에 대 한 일반 정보
/GL 컴파일러 옵션에 대 한 자세한 내용은 다음 MSDN 웹 사이트를 참조 하십시오.
/GL 컴파일러 옵션에 대 한 일반 정보
/O 최적화 옵션에 대 한 자세한 내용은 다음 MSDN 웹 사이트를 참조 하십시오.
일반 정보도 /O 옵션 (코드 최적화)

속성

기술 자료: 2802711 - 마지막 검토: 2013년 3월 29일 금요일 - 수정: 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 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 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