web-dev-qa-db-ja.com

Visual Studioは新しいC / C ++標準をサポートしていますか?

私はC99とC++ 11、そしていつか使うのにいいかもしれない言語標準に追加されるこれらすべての完全に甘いものについて読み続けています。ただし、現在Visual StudioでC++を書いている土地では苦労しています。

標準の新しいもののいずれかがビジュアルスタジオに追加されることはありますか?それとも、Microsoftはそれを行うために新しいC#バリアントを追加することに関心がありますか?

編集:受け入れられた答えに加えて、私はVisual C++チームのブログを見つけました:

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

そして具体的には、この中のこの投稿:

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

非常に便利。ありがとう!

102
Colen

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=34536

こんにちは:残念ながら、大多数のユーザーから得られる圧倒的なfe折は、C-99ではなくC++-0xに焦点を当てることを好むということです。 「チェリーピック」された特定の人気のあるC-99機能(さまざまなマクロ、long long)しかし、これを超えて、C-99空間で(少なくとも短期的に)もっと多くのことを行うことはまずありません。

ジョナサン洞窟

Visual C++コンパイラチーム。

これは非常に悲しい状況ですが、MSがユーザーをロックしたいのではないかと思われる場合にも意味があります。最新のgccベースのコードをMSVCに移植することは非常に困難です。

ただし、回避策が存在します。Intelの方がはるかに賢明であることに注意してください。 Intel CコンパイラはC99コードを処理でき、gccと同じフラグを持っているため、プラットフォーム間でコードを移植するのがはるかに簡単です。また、IntelコンパイラはVisual Studioで動作します。したがって、MS COMPILERを廃棄することにより、MS IDEを使用して、何らかの価値があると考えているように思われます。

より賢明なアプローチは、正直にIntel CCまたはgccに移行し、プログラミング環境にEclipseを使用することです。私の経験では通常、Windows-Linux-Solaris-AIX-etcでのコードの移植性は重要であり、残念ながらMSツールではまったくサポートされていません。

103
jakobengblom2

ハーブサッターは、Visual Studio for Microsoftのソフトウェアアーキテクトであると同時に、C++標準化委員会の委員であり、非常に活発なメンバーでもあります。

彼は、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

ハーブサッターは次のことを明らかにしました。

  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/

36
paercebal

VC2013 preview 1 、C99から開始し、より多様なC++ 11のセットといくつかの新しく導入されたC++ 14標準がサポートされています。詳細については、公式ブログをご覧ください: 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=943448 (Stephan T Lavavej aka:STLはSTL @VCチームのメンテナーです):

具体的には、2015年には、tgmath.h(C++とは無関係)およびCX_LIMITED_RANGE/FP_CONTRACTプラグママクロを除き、C99標準ライブラリの実装が完了しました。

詳細については、この投稿をご覧ください: http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015-rc .aspx

11
vulcan raven

私はISO C++の作業(2000年から2005年)に携わっており、Microsoftはその言語に多大な貢献をしました。 C++ 0xで動作することは間違いありませんが、Intelよりも少し時間が必要です。 Micosoftは、独自の拡張機能を使用することが多い、より大きなコードベースを処理する必要があります。これは単純に長いテストフェイズになります。それでも、最終的にはほとんどのC++ 0xをサポートします(エクスポートはまだ好きではありませんが、私は理解しています)。

ISO Cに関しては、標準に取り組んでいる人々はMicrosoft市場の代表ではありません。 Microsoftのお客様は、より良いCを探しているだけならC++ 98を使用できます。それでは、なぜMicrosoftはC99にお金を使うのでしょうか?確かに、Microsoftが厳選したパーツですが、それは正気なビジネスです。とにかくC++ 0xに必要なのに、なぜ待つのですか?

8
MSalters

CのMSVCサポートは、残念ながら非常に不足しています。これは、C++のサブセットであるC99の部分のみをサポートします。つまり、ffmpegまたはそのlibav *ライブラリをMSVCでコンパイルすることは、名前付きstruct要素などの多くのC99機能を使用するため、物理的に不可能です。これは、libavcodecがスタックアラインメントを維持するコンパイラを必要とするという事実によって悪化しますが、MSVCはそうではありません。

私はffmpeg doesとは異なり、MSVCをサポートするために努力するx264に取り組んでいますが、そうすること自体が悪夢であることがよくあります。明示的なAssemblyベースのスタックアライメント関数を介して明示的に最高の関数呼び出しを渡してもスタックアライメントを維持しないため、アライメントされたスタックを必要とするすべての関数を無効にする必要があります。また、vararrayも使用できないことも非常に面倒です。おそらくGCCはパフォーマンス面で非常に悲観的であるため、おそらくこれが最適です。

7
Dark Shikari

MSVC 2010および2011に対するMSVCのC++ 11機能の互換性に関する最新の投稿は 現在オンライン です。

6
fbrereto

これに関する更新情報:

現在(2008年11月10日)、VS2010の「Community Tech Preview」(CTP)があり、C +のsome部分を含むVC10のプレビューが含まれています。 + 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 September Community Technology Preview(CTP)のVisual C++コンパイラには、次の4つのC++ 0x言語機能のサポートが含まれています。」

  • ラムダ、
  • 自動、
  • static_assert、
  • 右辺値参照
4
Michael Burr

マイクロソフトは、c99標準(これは古くなってきています)を最新の状態に保つことに真の関心を表明したことはありません。 Cプログラマーにとっては悲しいことですが、MicrosoftはC++コミュニティにもっと関心を持っていると思います。

4
JesperE

Visual C++ 2008 SP1には少なくともTR1の一部が含まれており、Visual C++チームは時々C++ 0xについてブログを書いたり話したりしています。私は公式なものは何も読みませんでした。

4
OregonGhost

Visual C++チームは、2010リリースでサポートされているC++ 0x機能の表を http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0xで公開しました。 -core-language-features-in-vc10-the-table.aspx 。仕様と実装の間に遅延時間がある可能性があるため、それはかなり合理的なようです。ウィキペディアには、仕様に関する素晴らしい記事があります。これを書いている時点ではまだ終わっていません。

3
David Scruggs

Herb SutterはISO C++標準化団体の議長であり、Microsoftでも働いています。私はVisual Studio C標準については知りません-主にプレーンCを使用したことがないためです-しかし、Microsoftは確かに新しいC++標準を推進しようとしています。これの証拠は-前述のOregonGhostのように-最新のVisual Studio Service Releaseに含まれているTR1です。

3
QBziZ

Visual C++ Bloqは、VC++ 11でのC++ 11のサポートに関するいくつかの興味深い点(いくつかのテーブルを含む)に関する多くの情報を提供します。

  • C++ 11コア言語機能
  • C++ 11コア言語機能:並行性
  • C++ 11コア言語機能:C99
  • x86コンテナーサイズ(バイト)
  • x64コンテナサイズ(バイト)

Visual C++チームブログ、Visual C++ 11のC++ 11機能

1
Pixelchemist