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


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/

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


3
vcblogの2008/02の記事であなたが見つけた便利な機能は理解できません。そこで説明されている機能は、boostに長く存在し、非常によく知られているからです。C ++ 0xの世界を変える機能は異なります:en.wikipedia.org/wiki/C%2B%2B0xにリストされているラムダ関数、初期化子など。
amit

blogs.msdn.com/vcblog/archive/2009/04/22/を参照してください最近の記事も(質問されたときよりも遅いことはわかっています)
amit

1
これは、大幅にアップデート2 2015年のように、Visual Studioの最近のバージョンで改善されました: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に移植することを非常に難しくします。

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

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


42
それでも、彼らの本当の理由は、彼らが言ったこととまったく同じだと思います。WindowsのCコミュニティは、C ++ / C#/。NET / ASPコミュニティと比較すると、おそらくほとんど存在しないか、無視できます。したがって、それらには有効なポイントがあります。Linuxを使用していますが、g ++のように、C99のせいでMSVC ++をスクラップしません。
paercebal 2008

11
彼らが少なくとも(int i ;;)とインラインを提供してくれるなら。
Nick Van Brunt


2
C ++ 0x指向の開発に関する彼らの回答の最も良い部分は、現在、4年以上経った今でも、C ++ 11のサポートはほとんどないということです。(一方、gccはほぼすべてをサポートしています。)
GManNickG

10
FWIW、VC2013プレビューはC ++ 11およびC99標準をサポートするようになりました。C / C ++開発者向けの新機能を確認しください。
バルカンレイヴン2013年

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にとどまっている限り、C ++ 0xのWindowsへの組み込みは保証されていると思います。

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

では、私はマイクロソフトでしょうか。同じ機能が既にほとんどの人が既に使用しているより多くのコミュニティアクティブ言語で提供されているときに、ほとんどの人が使用しない機能を実装するのはなぜですか?

結論?

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/


1
公平を期すために-C99のブール値の実装は、健全なコード(つまり、ブール値を持つようにブールを定義したコード)との下位互換性を可能にするために行われました。
Maciej Piechotka

19
これは、「最も興味深いC99の機能はすでにC ++に存在する」というのは単なる誤りです。16進浮動小数点フォーマッターおよびリテラル。C99数学ライブラリ関数。構造体/共用体の名前付き初期化子。restrictキーワード。C ++にはない優れたC99機能がたくさんあります。それらは、Cプログラマーとして毎日使用している機能です。
スティーブンキャノン

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 ++の機能をまったく気にせず、Microsoftに少なくとも他の誰もがそうであるように標準に準拠しようとするCコンパイラを提供してほしいと思っているCプログラマーの世界は世界中にいます。
スティーブンキャノン、

13
@paercebal:「同等のもの」は役に立たない。他のすべてのプラットフォームで正常に動作する数百万行のポータブルCコードがあります。それらを書き換えることを提案していますか?C99ユーザーコミュニティは、IBM、HP、Apple、Intel、GNU、Sun、ARM、無数の組み込みデバイスコンパイラなど、互換性を提供しようとする他のすべての主要なコンパイラベンダーが十分に大きいため、Windowsプログラマにとって重要ではない場合があります。しかし、Windowsプログラムは、記述されたコード全体のごく一部です。
スティーブンキャノン

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から(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


私が知る限り、C99の部分的なサポートのみ:blogs.msdn.com/b/vcblog/archive/2013/07/19/…「...これはC99ライブラリ関数の完全なサポートではないことを知っています。」
sdfqwerqaz1

@ sdfqwerqaz1、ここの STLからのコメントを参照してください「コンパイラとライブラリのチームはケースバイケースでそれらを検討しますが、主な優先事項はC ++への準拠です。たとえば、C ++ 11/14にはC99標準が組み込まれているため、参照によるライブラリ、2015プレビューはC99標準ライブラリを完全にサポートします(省略はtgmath.hであり、これはCコンパイラマジックを必要とし、オーバーロードのあるC ++とは関係ありません。CX_LIMITED_RANGE/ FP_CONTRACTもコンパイラサポートを必要とします)
バルカンレイヴン2015年

8

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

ISO Cに関して言えば、標準に取り組んでいる人々はMicrosoftの市場を代表するものではありません。マイクロソフトの顧客は、より優れたCを探しているだけであれば、C ++ 98を使用できます。では、なぜマイクロソフトはC99にお金を使うのでしょうか。確かに、マイクロソフトは厳選された部品ですが、それは常識的なビジネスです。彼らはとにかくC ++ 0xのためにそれらを必要とするでしょう、それでなぜ待つのですか?


7

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

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



4

マイクロソフトは、c99標準(現在は古くなっている)に対応することに真の関心を示したことはありません。Cプログラマーには悲しいですが、MicrosoftはC ++コミュニティーをもっと重視しているのではないかと思います。


4

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


4

これに関する更新情報:

現在(2008年11月10日)、VS2010の「コミュニティテックプレビュー」(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、
  • 右辺値参照

3

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


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。仕様と実装の間に遅れ時間が存在する可能性があるため、それはかなり合理的であると思われます。ウィキペディアには、仕様に関する素晴らしい記事があります。これを書いている時点ではまだ完成していません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.