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の場合はこれと同様 。
幸い、この問題に対する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
タイプ。まだ足りないもの:
inline
キーワードのサポート(__inline
を使用できますが、セマンティクスは少し異なる場合があります)。restrict
キーワードのサポート(__restrict
を使用できる場合があります)。tgmath.h
の型汎用数学関数。_Complex
タイプ(C11ではオプション)。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に見られる言語機能は、これから得られるもののようです。