새로운 C / C ++ 표준에 대한 Visual Studio 지원?


102

나는 C99와 C ++ 11에 대해 계속 읽고 있으며 언젠가 사용하기에 좋을지도 모르는 언어 표준에 추가되는 완전히 달콤한 것들에 대해 읽었습니다. 그러나 우리는 현재 Visual Studio에서 C ++를 작성하는 데 어려움을 겪고 있습니다.

표준의 새로운 항목이 Visual Studio에 추가 될까요? 아니면 Microsoft가 새로운 C # 변형을 추가하는 데 더 관심이 있습니까?

편집 : 수락 된 답변 외에도 Visual C ++ 팀 블로그를 찾았습니다.

http://blogs.msdn.com/vcblog/

그리고 구체적으로이 게시물은 다음과 같습니다.

https://web.archive.org/web/20190109064523/https://blogs.msdn.microsoft.com/vcblog/2008/02/22/tr1-slide-decks/

굉장히 유용하다. 감사!


3
vcblog의 2008/02 기사에서 설명 된 기능이 오랫동안 부스트에 존재하고 잘 알려 졌기 때문에 유용한 정보를 이해하지 못합니다. 세계를 변화시키는 C ++ 0x의 기능은 다릅니다 : 람다 함수, 이니셜 라이저 등은 en.wikipedia.org/wiki/C%2B%2B0x에 나열되어 있습니다.
amit

blogs.msdn.com/vcblog/archive/2009/04/22/… 최근 기사도 참조하십시오 (질문을했을 때보 다
늦었다

1
이는 크게 2015 업데이트 2처럼, 비주얼 스튜디오의 최신 버전에서 개선되었습니다 : visualstudio.com/en-us/news/vs2015-update2-vs.aspx#Cdoubleplus
리카르도 페레스에게

답변:


103

MS는 이것에 대한 일련의 공개 답변을 가지고 있으며 대부분은 사용자를 비난합니다. 이 같은:

https://devblogs.microsoft.com/cppblog/iso-c-standard-update/

이제 Visual C ++ 컴파일러 팀은 때때로 C99를 구현하지 않은 이유에 대한 질문을받습니다. 실제로 사용자의 관심을 기반으로합니다. 특정 C99 기능에 대한 많은 요청을 받았지만이를 구현하려고 시도했습니다 (또는 유사 기능). 몇 가지 예는 가변 인자 매크로입니다, long long, __pragma, __FUNCTION__,와 __restrict. 작업에 유용하다고 생각되는 다른 C99 기능이 있으면 알려주십시오! 우리는 C 사용자로부터 많은 것을 듣지 못합니다.

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=345360

안녕하세요 : 안타깝게도 대부분의 사용자로부터 얻은 압도적 인 단점은 C-99 대신 C ++-0x에 집중하는 것을 선호한다는 것입니다. 우리는 인기있는 특정 C-99 기능 (다양한 매크로 long long)을 "선택" 했지만 그 이상으로 C-99 영역에서 (적어도 단기적으로) 더 많은 작업을 수행 할 가능성은 낮습니다.

조나단 케이브

Visual C ++ 컴파일러 팀.

이것은 매우 슬픈 상황이지만 MS가 사용자를 잠그고 싶어한다고 의심되는 경우에도 의미가 있습니다. 최신 gcc 기반 코드를 MSVC로 이식하기가 매우 어렵습니다. 적어도 나는 매우 고통 스럽습니다.

그러나 해결 방법이 있습니다. 인텔이 이에 대해 훨씬 더 잘 알고 있습니다. 인텔 C 컴파일러는 C99 코드를 처리 할 수 ​​있으며 gcc와 동일한 플래그를 가지므로 플랫폼간에 코드를 훨씬 쉽게 이식 할 수 있습니다. 또한 인텔 컴파일러는 비주얼 스튜디오에서 작동합니다. 따라서 MS COMPILER를 스크랩하면 어떤 종류의 가치가 있다고 생각되는 MS IDE를 계속 사용할 수 있으며 마음에 드는 콘텐츠에 C99를 사용할 수 있습니다.

보다 현명한 접근 방식은 솔직히 Intel CC 또는 gcc로 이동하고 프로그래밍 환경에 Eclipse를 사용하는 것입니다. Windows-Linux-Solaris-AIX 등의 코드 이식성은 일반적으로 내 경험에서 중요하며 불행히도 MS 도구에서는 전혀 지원되지 않습니다.


42
그래도 그들의 진정한 이유는 그들이 말한 것과 정확히 일치한다고 생각합니다. Windows의 C 커뮤니티는 아마도 C ++ / C # /. NET / ASP 커뮤니티와 비교할 때 거의 존재하지 않거나 무시할 수있을 것입니다. 따라서 그들은 유효한 포인트를 가지고 있습니다. Linux가 있고 g ++처럼 C99 때문에 MSVC ++를 스크랩하지 않겠습니다. 죄송합니다.
paercebal

11
그들이 적어도 우리에게 (int i ;;) 및 인라인을 제공한다면.
Nick Van Brunt


2
C ++ 0x 지향 개발에 대한 응답의 가장 좋은 부분은 4 년이 지난 지금도 C ++ 11 지원이 거의 없다는 것입니다. (반면 gcc는 거의 모든 것을 지원합니다.)
GManNickG 2012

10
FWIW, VC2013 프리뷰 는 이제 C ++ 11 및 C99 표준을 지원합니다. C / C ++ 개발자를위한 새로운 기능을 확인하세요 .
발칸 까마귀

37

Herb Sutter는 C ++ 표준화위원회의 의장이자 매우 활동적인 멤버이자 Microsoft 용 Visual Studio의 소프트웨어 아키텍트입니다.

그는 C ++ 0x 용으로 표준화 된 새로운 C ++ 메모리 모델의 저자 중 한 명입니다. 예를 들어, 다음 논문 :

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2669.htm
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007 /n2197.pdf

그의 이름이 적혀 있습니다. 따라서 H. Sutter가 Microsoft에 남아있는 한 Windows에 C ++ 0x가 포함되는 것은 확실하다고 생각합니다.

Visual Studio에 부분적으로 만 포함 된 C99에 관해서는 이것이 우선 순위의 문제라고 생각합니다.

  • 가장 흥미로운 C99 기능은 이미 C ++ (인라인, 변수 선언, // 주석 등)에 이미 존재하며 Visual Studio의 C에서도 이미 사용할 수 있습니다 (C ++ 컴파일러 내에서 C 코드 만 수행하는 경우). C ++의 C99 기능에 대한 자세한 내용은 여기 내 대답을 참조하십시오 .
  • C99는 C ++에 이미 존재하는 기능을 추가하여 C와 C ++ 사이의 차이를 증가 시키지만 호환되지 않는 방식으로 (죄송하지만 C99 의 부울 복합 구현은 기껏해야 웃길 수 있습니다 ... http://david.tribble.com/ 참조) 자세한 내용은 text / cdiffs.htm )
  • Windows의 C 커뮤니티가 존재하지 않거나인지 할만큼 중요하지 않은 것 같습니다.
  • Windows의 C ++ 커뮤니티는 무시하기에는 너무 중요해 보입니다.
  • .NET은 Microsoft가 사람들이 Windows에서 프로그래밍하기를 바라는 방식입니다. 이것은 C #, VB.NET, 아마도 C ++ / CLI를 의미합니다.

그렇다면 내가 마이크로 소프트일까요? 대부분의 사람들이 이미 사용하고있는 더 많은 커뮤니티 활동 언어로 동일한 기능이 이미 제공되었을 때 소수의 사람들이 사용하지 않을 기능을 구현하는 이유는 무엇입니까?

결론?

C ++ 0x는 VS 2008의 확장으로 또는 Visual Studio의 차세대 (세대?)에 포함될 것입니다.

이미 구현되지 않은 C99 기능은 극적인 일이 발생하지 않는 한 내년에 출시되지 않을 것입니다 (C99 개발자로 가득한 국가가 갑자기 나타나나요?).

2011-04-14 수정

분명히 "C99 개발자로 가득 찬 국가"는 이미 존재합니다 : http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6415401
^ _ ^

그래도 http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6828778 의 마지막 댓글 은 충분히 명확합니다.

2012-05-03 수정

Herb Sutter는 다음과 같이 분명히했습니다.

  1. 우리의 주요 목표는 "ISO C ++ 98 / C ++ 11의 하위 집합 인 대부분의 C99 / C11"을 지원하는 것입니다.
  2. 또한 역사적인 이유로 C ++가 아닌 C90 만 허용하는 C90 컴파일러를 제공합니다.
  3. C90 또는 ISO C ++의 일부가 아닌 ISO C 기능은 지원할 계획이 없습니다.

블로그 게시물은 이러한 결정에 대한 링크와 추가 설명을 추가합니다.

출처 : http://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/


1
공정하게-C99의 부울 구현은 정상 코드 (즉, 부울을 갖도록 bool을 정의한 코드)와의 하위 호환성을 허용하기 위해 수행되었습니다.
Maciej Piechotka 2011

19
"가장 흥미로운 C99 기능은 이미 C ++에 있습니다."는 거짓입니다. 16 진 부동 소수점 포맷터 및 리터럴. C99 수학 라이브러리 함수. 구조체 / 유니온에 대한 명명 된 이니셜 라이저. restrict키워드. C ++에는없는 훌륭한 C99 기능이 많이 있으며, C 프로그래머로서 매일 사용하는 기능입니다.
Stephen Canon

1
@Stephen Canon : 내 대답을 읽어주세요 : stackoverflow.com/questions/3879636/… . 물론 이것은 C ++ 개발자를위한 C ++ 답변이므로 클래스, 생성자 또는 오버로드 된 수학 함수 (C ++에서 tgmath.h가 필요한 사람)를 사용하지 않으려는 C 개발자에게는 적합하지 않습니다. 요점은 중요한 것은 이미 존재하거나 구현하기 쉽다는 것입니다. restrict키워드에 관해서 는 여전히 C ++에서 사용할 수 있습니다 . 분명히 stackoverflow.com/questions/776283/… . . .
paercebal 2011

5
@paercebal : 당신은 그 관점에 대한 권리가 있지만 C ++ 에는 16 진수 부동 소수점 리터럴을 포기하도록 유도하는 것은 없습니다 . 이것이 바로 나의 요점입니다. 물론 C ++ 프로그래머는 C99 기능에 관심이 없습니다. 그것이 아마도 그들이 C ++ 프로그래머 인 이유 일 것입니다. 반대로, C ++ 기능을 전혀 신경 쓰지 않고 마이크로 소프트가 최소한 다른 사람들처럼 표준을 준수하려고 시도하는 C 컴파일러를 제공하기를 바라는 전 세계의 C 프로그래머가 있습니다.
Stephen Canon

13
@paercebal : "등가"는 쓸모가 없습니다. 다른 모든 플랫폼에서 잘 작동하는 수백만 줄의 휴대용 C 코드가 있습니다. 재 작성을 제안하고 있습니까? C99 사용자 커뮤니티는 다른 모든 주요 컴파일러 공급 업체 (IBM, HP, Apple, Intel, GNU, Sun, ARM, 수많은 임베디드 장치 컴파일러 등)가 최소한 호환성을 제공하려고 할만큼 충분히 넓습니다 . C99는 Windows 프로그래머 에게는 중요하지 않을 수 있습니다 . 그러나 Windows 프로그램은 작성된 전체 코드의 아주 작은 부분을 차지합니다.
Stephen Canon

11

에서 시작 VC2013 미리보기 1 , C99, C ++ (11)의보다 다양 세트 (14 개) 표준을 지원하는 몇 가지 새로 도입 된 C ++. 자세한 내용은 공식 블로그를 확인하세요. http://blogs.msdn.com/b/vcblog/archive/2013/06/27/what-s-new-for-visual-c-developers-in-vs2013-preview. aspx

최신 정보:

에서 https://news.ycombinator.com/item?id=9434483 (스테판 T Lavavej 일명 : STL은 STL @VC 팀의 메인테이너이다) :

특히 2015 년에는 tgmath.h (C ++와 무관) 및 CX_LIMITED_RANGE / FP_CONTRACT pragma 매크로를 제외하고는 C99 표준 라이브러리 구현이 완료되었습니다.

자세한 내용은이 게시물을 확인하십시오. http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015-rc.aspx .


내가 말할 수있는 한 C99에 대한 부분적인 지원 만 있습니다. blogs.msdn.com/b/vcblog/archive/2013/07/19/… "... 우리는 이것이 C99 라이브러리 함수에 대한 완전한 지원이 아니라는 것을 알고 있습니다."
sdfqwerqaz1

@ sdfqwerqaz1, 여기 STL의 주석을 참조 하십시오 . "컴파일러와 라이브러리 팀은이를 사례별로 고려하지만 우리의 주요 우선 순위는 C ++ 적합성입니다. 예를 들어 C ++ 11 / 14는 C99 표준을 통합하기 때문입니다. 참고로 라이브러리, 2015 Preview는 C99 표준 라이브러리를 완벽하게 지원합니다 (C 컴파일러 매직이 필요하고 오버로딩이있는 C ++와 관련이없는 tgmath.h 및 컴파일러 지원이 필요한 CX_LIMITED_RANGE / FP_CONTRACT 만 제외) " .
vulcan raven

8

저는 ISO C ++ 작업 (2000-2005)에 참여했으며 Microsoft는 해당 언어에 상당한 공헌을했습니다. 그들이 C ++ 0x에서 작동 할 것이라는 데는 의심의 여지가 없지만 인텔이 말하는 것보다 조금 더 많은 시간이 필요할 것입니다. Micosoft는 종종 독점 확장을 사용하는 더 큰 코드베이스를 처리해야합니다. 이것은 단순히 더 긴 testfase를 만듭니다. 그러나 그들은 결국 대부분의 C ++ 0x를 지원할 것입니다 (내보내기는 여전히 사랑받지 못하거나 이해합니다).

ISO C와 관련하여 표준 작업을하는 사람들은 Microsoft 시장을 대표하지 않습니다. Microsoft의 고객은 더 나은 C를 찾고 있다면 C ++ 98을 사용할 수 있습니다. 그렇다면 Microsoft가 C99에 돈을 쓰는 이유는 무엇입니까? 물론, 마이크로 소프트가 일부를 선택했지만 그것은 건전한 사업이다. 어쨌든 그들은 C ++ 0x를 위해 그것들이 필요할 것입니다. 그런데 왜 기다리나요?


7

C에 대한 MSVC 지원은 불행히도 매우 부족합니다. C ++의 하위 집합 인 C99 부분 만 지원합니다. 즉, 명명 된 구조체 요소와 같은 많은 C99 기능을 사용하기 때문에 MSVC에서 ffmpeg 또는 해당 libav * 라이브러리를 컴파일하는 것이 물리적으로 불가능합니다. 이는 libavcodec에도 스택 정렬을 유지하는 컴파일러가 필요하다는 사실로 인해 더 나빠집니다. MSVC는 그렇지 않습니다.

달리는 FFmpeg x264에 내가 작업 않습니다 이렇게하면 종종 그 자체의 악몽을하고있다지만, MSVC를 지원하기 위해 노력하고 있습니다. 명시 적 어셈블리 기반 스택 정렬 함수를 통해 가장 높은 함수 호출을 명시 적으로 전달하더라도 스택 정렬을 유지하지 않으므로 정렬 된 스택이 필요한 모든 함수를 비활성화해야합니다. 또한 내가 vararray를 사용할 수 없다는 점도 매우 성가신 일이었습니다. 아마도 이것은 GCC가 성능면에서 크게 비관하기 때문에 최선의 방법 일 것입니다.



4

마이크로 소프트는 c99 표준 (지금까지 늙어 가고 있음)을 최신 상태로 유지하는 데 진정한 관심을 표명 한 적이 없습니다. C 프로그래머에게는 안타깝지만 Microsoft가 C ++ 커뮤니티에 더 관심이 있다고 생각합니다.


4

Visual C ++ 2008 SP1에는 적어도 TR1의 일부가 포함되어 있으며 때때로 Visual C ++ 팀이 블로그를 작성하거나 C ++ 0x에 대해 이야기하고 있으므로 기능에서 언젠가는 지원할 것이라고 생각합니다. 나는 공식적인 것을 읽지 않았다.


4

이에 대한 업데이트 된 정보 :

이제 (2008 년 11 월 10 일) C ++ 0x의 일부 가 구현 된 VC10의 미리보기가 포함 된 VS2010의 "커뮤니티 기술 미리보기"(CTP)가 있습니다 (VC10에는 C ++ 0x의 전체 집합이 포함되지 않음). VC10이 출시 된 경우에도 변경 사항이 구현 됨) :

http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&displaylang=en

VC10 CTP의 새로운 기능에 대한 세부 정보 :

위 기사에서 언급 한 것처럼 "Microsoft Visual Studio 2010 9 월 CTP (Community Technology Preview)의 Visual C ++ 컴파일러에는 다음과 같은 네 가지 C ++ 0x 언어 기능에 대한 지원이 포함되어 있습니다."

  • 람다,
  • 자동,
  • static_assert,
  • rvalue 참조

3

Herb Sutter는 ISO C ++ 표준기구의 회장이며 Microsoft에서도 근무합니다. 저는 Visual Studio C 표준에 대해 알지 못합니다. 주로 일반 C를 사용하지 않기 때문에 Microsoft는 새로운 C ++ 표준을 발전 시키려고 노력하고 있습니다. 이에 대한 증거는 OregonGhost가 언급 한 것처럼 최신 Visual Studio 서비스 릴리스에 포함 된 TR1입니다.



1

Visual C ++ Bloq는 여러 테이블을 포함하여 VC ++ 11의 C ++ 11 지원과 관련된 몇 가지 흥미로운 사항에 대한 많은 정보를 제공합니다.

  • C ++ 11 핵심 언어 기능
  • C ++ 11 핵심 언어 기능 : 동시성
  • C ++ 11 핵심 언어 기능 : C99
  • x86 컨테이너 크기 (바이트)
  • x64 컨테이너 크기 (바이트)

Visual C ++ 팀 블로그, Visual C ++ 11의 C ++ 11 기능

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.