문제

나는 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와 동일한 플래그도 포함하므로 플랫폼 간에 코드를 훨씬 쉽게 포팅할 수 있습니다.또한 Intel 컴파일러는 Visual Studio에서 작동합니다.따라서 MS COMPILER를 폐기해도 일종의 가치가 있다고 생각되는 MS IDE를 계속 사용할 수 있으며 C99를 마음껏 사용할 수 있습니다.

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

다른 팁

Herb Sutter는 C ++ Standardization Comitee의 의자이자 매우 활발한 멤버이며 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

그의 이름을 가지고 있습니다. 따라서 C ++ 0X의 Windows에 포함 된 것은 H. Sut

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

  • 가장 흥미로운 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를 의미합니다.

그렇다면 Microsoft가 될까요? 왜 동일한 기능이 이미 대부분의 사람들이 사용했던 더 많은 커뮤니티 활성 언어에서 동일한 기능을 제공 할 때 몇 사람이 사용할 수있는 기능을 구현합니까?

결론?

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://herbsterter.com/2012/05/03/reader-qa-what-about-vc-and-c99/

시작 VC2013 미리보기 1, C99,보다 다각화 된 C ++ 11 세트 및 새로 도입 된 일부 C ++ 14 표준이 지원됩니다. 자세한 내용은 공식 블로그를 확인하십시오. http://blogs.msdn.com/b/vcblog/archive/2013/06/27/what-s-new-for-vesual-c-developers-in-vs2013-preview.aspx

업데이트:

에서 https://news.ycombinator.com/item?id=9434483 (Stephan T Lavavej AKA : STL은 STL @VC 팀의 관리자입니다) :

구체적으로, 2015 년에는 TGMATH.H (C ++와 관련이없는) 및 CX_LIMITED_RANGE/FP_CONTRAT PRAGMA 매크로를 제외하고 C99 표준 라이브러리 구현이 완료되었습니다.

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

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

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

C에 대한 MSVC 지원은 불행히도 매우 부족합니다. C ++의 서브 세트 인 C99의 일부만 지원합니다. 예를 들어, MSVC에서 FFMPEG 또는 해당 LIBAV* 라이브러리를 컴파일하는 것은 물리적으로 불가능합니다. 이는 Libavcodec에도 MSVC가하지 않는 스택 정렬을 유지하는 컴파일러가 필요하다는 사실에 의해 악화됩니다.

FFMPEG와 달리 X264에서 일합니다 하다 MSVC를 지원하기 위해 노력하지만, 그렇게하는 것은 종종 그 자체로 악몽이었습니다. 명시 적 어셈블리 기반 스택 정렬 기능을 통해 최고 함수 호출을 명시 적으로 전달하더라도 스택 정렬을 유지하지 않으므로 정렬 된 스택이 필요한 모든 기능을 비활성화해야합니다. 바라 레이도 사용할 수 없다는 것도 매우 성가신 일이었습니다. 아마도 GCC가 성능 면적으로 대량으로 비난하기 때문에 이것은 아마도 최고 일 것입니다.

MSVC의 C ++ 11 기능 호환성에 대한 최근의 게시물은 다음과 같습니다. 이제 온라인.

Microsoft는 C99 표준 (지금까지 오래되고 있음)으로 최신의 속도를 유지하는 데 실질적인 관심을 표명 한 적이 없습니다. C 프로그램에 대해 슬프지만 Microsoft가 C ++ 커뮤니티에 더 많은 관심을 갖는 것으로 생각됩니다.

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

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

현재 (2008 년 11 월 10 일) VS2010의 "Community Tech Preview"(CTP)가 있습니다. 약간 구현 된 C ++ 0X의 일부 (VC10은 VC10이 릴리스 될 때에도 구현 된 전체 C ++ 0X 변경 세트가 없음) : :

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 ++ 컴파일러에는 4 가지 C ++ 0X 언어 기능에 대한 지원이 포함되어 있습니다."

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

Herb Sutter는 ISO C ++ 표준 본문의 회장이며 Microsoft에서도 일합니다. Visual Studio C 표준에 대해 잘 모르겠습니다. 주로 일반 C를 사용하지 않기 때문에 Microsoft는 새로운 C ++ 표준을 앞으로 나아가려고 노력하고 있습니다. 이것에 대한 증거는 OregonGhost와 마찬가지로 최신 Visual Studio Service 릴리스에 포함 된 TR1입니다.

Visual C++ 팀은 2010 릴리스에서 지원하는 C++0x 기능 표를 다음 위치에 게시했습니다. http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-언어-features-in-vc10-the-table.aspx.사양과 구현 사이에 지연 시간이 있을 수 있으므로 이는 꽤 합리적으로 보입니다.Wikipedia에는 ​​사양에 대한 좋은 기사가 있습니다.제가 이 글을 쓰고 있는 시점에는 아직 끝나지 않았습니다.

Visual C ++ BLOQ는 여러 테이블을 포함하여 VC ++ 11에서 C ++ 11의 지원과 관련하여 여러 가지 교차점에 대한 많은 정보를 제공합니다.

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

Visual C ++ 팀 블로그, C ++ 11 비주얼 C ++ 11 기능

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top