web-dev-qa-db-ja.com

MS Visual Studioコンパイラーで使用可能なC99機能はどれですか?

MicrosoftのVisual StudioコンパイラがC99をサポートしていないことはよく知られており、 no plan から support it のように見えます。

ただし、コンパイラには、可変個のマクロやlong longなど、一部の厳選された機能が含まれています。引用符は this answer で参照してください。

特定のC99機能に対する多くのリクエストを受け取った場合、私たちはそれら(または類似物)を実装しようとしました。いくつかの例は、可変マクロ、long long__pragma__FUNCTION__、および__restrictです。作業に役立つと思われる他のC99機能がある場合は、お知らせください。 Cユーザーからはあまり聞いていないので、声を上げて自分の意見を聞いてもらう

-ISO C標準委員会のマイクロソフト代表であるArjun Bijanki http://blogs.msdn.com/b/vcblog/archive/2007/11/05/iso-c-standard-update.aspx =

さらに、Visual Studioの新しいバージョンには C99で必要なヘッダーの一部 が同梱されているようです。

特定の機能については多くの質問がありますが、私が知りたくないのは、現在のMSVCコンパイラでサポート/提供されているC99機能のリストはどこにありますか?

私はリストを探しています gccの場合はこれと同様

35
Timothy Jones

幸い、この問題に対するMicrosoftのスタンスは変更されました。 MSVC++バージョン12.0(Visual Studio 2013の一部) 追加のサポート for

  • _Boolタイプ。
  • 複合リテラル。
  • 指定イニシャライザ。
  • 宣言とコードを混在させる。
  • __func__定義済みの識別子。

_MSC_VERマクロ で1800以上の値を確認し、これらの機能がサポートされているかどうかを確認できます。

標準ライブラリのサポート も更新され、MSVC 14.0(Visual Studio 2015)では ほぼ完全 です。

以前のバージョンで既にサポートされているもの(少なくともMSVC 7.1/Visual Studio 2003以降だと思います):

  • //スタイルのコメント。
  • long longタイプ。
  • 柔軟な配列メンバー(Microsoftはそれらを「サイズなし配列」と呼びました)。
  • 可変個マクロ(少なくとも部分的に)。

まだ足りないもの:

  • 可変長配列(C11ではオプション)。
  • inlineキーワードのサポート(__inlineを使用できますが、セマンティクスは少し異なる場合があります)。
  • restrictキーワードのサポート(__restrictを使用できる場合があります)。
  • tgmath.hの型汎用数学関数。
  • _Complexタイプ(C11ではオプション)。
34
nwellnhof

MSVCでサポートされているC99の非ライブラリ言語機能(C90にはない)は//コメント。 Cモードでコンパイルする場合を除き、得られるC99機能は、MSコンパイラがサポートしていたC++標準/ドラフト標準/ TRに組み込まれたためにMicrosoftが導入したC99ライブラリ機能によるものです。たとえば、stdint.h VS 2010ではC++ TR1ドラフトにあったため。

マイクロソフトは、MSVCでC99をサポートするためのリソースを割り当てるための市場からの強いプッシュがないことを明らかにしているため、MSVCのCコンパイラモードで表示されるC99の唯一の部分は、 C++。

[〜#〜] i [〜#〜]不満を感じることの1つは、C++の一部として長い間使用されてきた非ライブラリC99言語機能がCモードで使用できないことです。個人的には、Cコードのコンパイル時に、ステートメントと宣言を混在させるC99機能のみがサポートされていれば非常に役立ちます。

しかし、今日のMSVCでCに見られる言語機能は、これから得られるもののようです。

9
Michael Burr