developer tip

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

copycodes 2020. 8. 16. 20:59
반응형

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


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

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

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

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

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

http://blogs.msdn.com/vcblog/archive/2008/02/22/tr1-slide-decks.aspx

굉장히 유용하다. 감사!


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

http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx

이제 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 도구에서는 전혀 지원되지 않습니다.


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/


에서 시작 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 팀의 메인테이너이다) :

Specifically, in 2015 our C99 Standard Library implementation is complete, except for tgmath.h (irrelevant in C++) and the CX_LIMITED_RANGE/FP_CONTRACT pragma macros.

Check this post out for details: http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015-rc.aspx.


I've been involved in the ISO C++ work (2000-2005), and Microsoft made significant contributions to that language. There's no doubt they will work on C++0x, but they'll need a bit more time than say Intel. Micosoft has to deal with a larger codebase that often uses their proprietary extensions. This simply makes for a longer testfase. Yet, they will support most of C++0x eventually (export still isn't loved though, or so I understand).

When it comes to ISO C, the people working on standard are not representative for Microsofts market. Microsofts customers can use C++98 if they're just looking for a better C. So why would Microsoft spend money on C99? Sure, Microsoft cherry-picked parts, but that's sane business. They'd need those for C++0x anyway, so why wait?


MSVC support for C is unfortunately very lacking. It only supports the portion of C99 that is a subset of C++... which means that, for example, it is physically impossible to compile ffmpeg or its libav* libraries in MSVC, because they use many C99 features such as named struct elements. This is made worse by the fact that libavcodec also requires a compiler that maintains stack alignment, which MSVC doesn't.

I work on x264, which unlike ffmpeg does make an effort to support MSVC, though doing so has often been a nightmare in and of itself. It doesn't maintain stack alignment even if you explicitly pass the highest function call through an explicit assembly-based stack alignment function, so all functions that require an aligned stack have to be disabled. Its also been very annoying that I cannot use vararrays either; perhaps this is for the best, since apparently GCC massively pessimizes them performance-wise.


A more recent post about MSVC's C++11 feature compatibility for MSVC 2010 and 2011 is now online.


Microsoft has never expressed any real interest in keeping up-to-speed with the c99-standard (which is getting old by now). Sad for C-programmers, but I suspect that Microsoft cares more for the C++-community.


Visual C++ 2008 SP1 contains parts of TR1 at least, and from time to time, the Visual C++ team is blogging or talking about C++0x, so I guess they will support it at some time in the feature. I didn't read anything official though.


Updated information on this:

There is now (10 Nov 2008) a "Community Tech Preview" (CTP) of VS2010 which contains a preview of VC10 that has some parts of C++0x implemented (note that VC10 will not have the full set of C++0x changes implemented even when VC10 is released):

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

Some details on what's new in the VC10 CTP:

As noted in the above article, "The Visual C++ compiler in the Microsoft Visual Studio 2010 September Community Technology Preview (CTP) contains support for four C++0x language features, namely:"

  • lambdas,
  • auto,
  • static_assert,
  • rvalue references

Herb Sutter is the chairman of the ISO C++ standards body and also works for Microsoft. I don't know about the Visual Studio C standard - mainly because I never use plain C - but Microsoft is sure trying to push the new C++ standard forward. Evidence of this is - like OregonGhost mentioned - the TR1 that is included in the latest Visual Studio Service Release.


The Visual C++ team did put out a table of C++0x features that the 2010 release supports at http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx. Since there can be a lag time between the spec and the implementation, that seems pretty reasonable. Wikipedia has a nice article about the spec. It's not finished at the time I'm writing this.


The Visual C++ Bloq provides a lot of information on several interesing points regarding the support of C++11 in VC++11, including several tables

  • C++11 Core Language Features
  • C++11 Core Language Features: Concurrency
  • C++11 Core Language Features: C99
  • x86 Container Sizes (Bytes)
  • x64 Container Sizes (Bytes)

Visual C++ Team Blog, C++11 Features in Visual C++ 11

참고URL : https://stackoverflow.com/questions/146381/visual-studio-support-for-new-c-c-standards

반응형