0

2005 컴파일러를 사용하여 Visual Studio 2010에서 프로젝트를 컴파일하려고했는데이 이상한 버그가 발생했습니다.VS2005 C++ 컴파일러가/Gd 플래그와 충돌 함

"Microsoft (R) C/C++ 컴파일러 최적화"오류 대화 상자에서 "보내지 않음"버튼을 사용하여 VS2010에서 컴파일 할 때마다 컴파일러와 충돌하는 특정 파일이 있습니다. VS2010이 2005 컴파일러를 호출하는 방식을 살펴본 결과 VS2005가 호출하는 방식과 약간의 차이가 있음을 알게되었습니다. 그래서 매번 시도한 후에 컴파일을 시도하면서 이러한 차이점을 하나씩 삭제하기 시작했고, 일단 /Gd 플래그를 제거하면 파일이 성공적으로 컴파일되었습니다.

컴파일러 문서를 보면이 플래그는 호출 규칙을 제어하고 기본값 인 __cdecl로 설정합니다. VS2005에서는 차이점 만 빠뜨렸지 만 VS2010을 명령 줄에 추가하여 충돌을 일으 킵니다.

누구든지이 문제가 발생했거나이 문제를 해결할 방법을 알고 있습니까? VS2010을 기본으로 설정 했는데도 명령 줄에서 /Gd을 삭제하는 방법을 찾지 못했습니다. 내가 찾을 수있는 것은 제거하는 것이 아니라 매개 변수를 추가하는 것입니다.

감사합니다.

+0

/Gd가 MSVC6 이상으로 돌아 간다는 점에서 주목할 만하다. 충돌하는 호출 규칙 플래그가 있습니까? – MSalters

+0

이 파일에는 암시 적/Gd 플래그가 주어 졌을 때 충돌을 일으키는 아주 특별한 코드가 있어야합니다. 내가 코드를 찾고 싶다면 코드 조각에 주석을 달아야한다. 하지만 수천 개의 파일이있는 특정 파일에서 수정해도 도움이 될지 확신 할 수 없습니다. 그래서 내가 처음에는/Gd 플래그를 사용하지 않도록하는 해결 방법을 찾고 있습니다. –

답변

1

새로운 IDE를 컴파일러의 조부모와 함께 사용하려는 좋은 이유가 있다면 ("궁금합니다!") "C/C++"구성 속성의 "고급"분기에서 호출 규칙을 변경할 수 있습니다 프로젝트의
그 목록 상자는 3 가지 값만 제공합니다. 그러나 수동으로 텍스트를 삭제하면 IDE가/Gx 스위치를 사용하지 않고 컴파일러를 호출합니다. 적어도 "명령 행"브랜치가 보여주는 것입니다.

문제를 재현 케이스로 끓여서 해당 공급 업체에 문의하는 것이 좋습니다. 그들은 이미 그 문제에 대한 핫픽스를 가지고있을 수도 있고 그렇지 않은 경우 비교적 짧은 시간에 하나를 생성 할 수도 있습니다. 소프트웨어의 버그로 인해 지원에 문의하는 것은 무료였습니다 (그리고 컴파일러가 항상 의미있는 메시지를 출력하는 대신 컴파일러가 충돌 할 때).

+0

놀라운, 텍스트 상자에서 텍스트 삭제 작업! (당신의 호기심에 관해서는, 그것은 잘 생각할 필요가 없습니다. 잘하면 intellisense, 잘하면 ;-). 나는 더 쉬운 시나리오로 그것을 재현 할 시간이있을 때 버그를 제기 할 것이다. –

+0

@ 아이단 : Intellisense는 VC10에서 __worse__입니까 ??? 그건 나쁜 소식이 될거야 ... 어쨌든 Intellisense가 더 좋아 지길 원하면 [Visual Assist] (http : //www.wholetomato.com/)에서 좌석 당 몇 달러를 소비하십시오. 돈 가치가있어 더 나은 컴파일러 인 VC10을 사용할 수 있습니다. (그것은 단지 rvalue 레퍼런스에 대한 지원과 함께, 단순한 재 컴파일을 통해 코드 속도를 높이기로되어 있습니다.) 그들은 그들의 웹 사이트에서 평가판 다운로드를 가지고 있습니다. 그러나 경고를 받았다. 나는 아직 3 일 동안 그것을 시도한 개발자를 보지 못했다. 그리고 그를 위해 그를 사기 위해 매니저에게 간청하지 않았다. – sbi