102

私は C99 と C++11 について読み続けており、これらすべてが言語標準に追加されつつあり、いつか使用すると便利になるかもしれません。しかし、私たちは現在、Visual Studio で C++ を作成することで苦しんでいます。

標準の新しいものがビジュアル スタジオに追加されることはありますか?それとも、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/

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

4

12 に答える 12

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 に移植することが非常に困難になり、少なくとも私は非常に苦痛です。

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

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

于 2008-09-28T18:24:11.043 に答える
37

Herb Sutter は、C++ 標準化委員会の議長であり、非常に活発なメンバーでもあり、Microsoft の Visual Studio のソフトウェア アーキテクトでもあります。

彼は、C++0x 用に標準化された新しい C++ メモリ モデルの作成者の 1 人です。たとえば、次の論文です。

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 を意味します。

では、私は Microsoft であり、ほとんどの人が既に使用している、より多くのコミュニティでアクティブな言語で同じ機能が既に提供されているのに、ほとんどの人が使用しない機能を実装する必要があるでしょうか?

結論?

C++0x は、VS 2008 の拡張として、または Visual Studio の次世代 (世代?) に含まれます。

まだ実装されていない C99 機能は、何か劇的なことが起こらない限り、次の年には実装されません (C99 開発者でいっぱいの国がどこからともなく現れますか?)。

2011 年 4 月 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/

于 2008-09-28T19:34:15.367 に答える
11

VC2013プレビュー 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=9434483 (Stephan T Lavavej 別名: STL は STL @VC チームのメンテナー) から:

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

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

于 2013-06-27T16:47:51.553 に答える
8

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?

于 2008-09-29T12:19:12.580 に答える
7

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

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

于 2008-09-28T19:45:42.437 に答える
6

MSVC 2010 および 2011 に対する MSVC の C++11 機能の互換性に関する最近の投稿がオンラインになりました。

于 2011-10-14T17:15:32.643 に答える
4

Microsoft は、c99 標準 (現在では古くなりつつあります) に追いつくことに関心を示したことはありません。C プログラマーにとっては悲しいことですが、Microsoft は C++ コミュニティをより重視していると思います。

于 2008-09-28T18:12:57.497 に答える
4

Visual C++ 2008 SP1 には少なくとも TR1 の一部が含まれており、Visual C++ チームは時々 C++0x についてブログを書いたり話したりしているので、機能でいつかサポートされると思います。私は公式のものを読んだことはありません。

于 2008-09-28T18:19:13.083 に答える
4

これに関する更新情報:

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

  • ラムダ、
  • 自動、
  • static_assert、
  • 右辺値参照
于 2008-11-10T20:05:20.927 に答える
3

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 . 仕様と実装の間にタイムラグがある可能性があるため、それはかなり妥当なようです。ウィキペディアには、仕様に関する素晴らしい記事があります。これを書いている時点ではまだ終わっていません。

于 2011-01-26T18:36:15.867 に答える
3

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

于 2008-09-28T18:55:47.907 に答える
1

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

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

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

于 2013-06-28T03:03:30.660 に答える