利用者:Anonymouse jp/sandbox
ここはAnonymouse jpさんの利用者サンドボックスです。編集を試したり下書きを置いておいたりするための場所であり、百科事典の記事ではありません。ただし、公開の場ですので、許諾されていない文章の転載はご遠慮ください。
登録利用者は自分用の利用者サンドボックスを作成できます(サンドボックスを作成する、解説)。 その他のサンドボックス: 共用サンドボックス | モジュールサンドボックス 記事がある程度できあがったら、編集方針を確認して、新規ページを作成しましょう。 |
Microsoft C/C++ Optimizing Compiler (まいくろそふと しー/しーぷらすぷらす おぷてぃまいじんぐ こんぱいらー)とは、Microsoft社製のC言語及びC++言語そしてC++/CLI言語用のコンパイラーである。この記事ではMicrosoft C/C++ Optimizing Compilerと一体で配布されるMicrosoft Incremental Linkerについても扱う。
概要
[編集]Microsoft C/C++ Optimizing Compilerは、Microsoft社製品のVisual C++やPlatform SDK、Windows SDKに付属するコンパイラーである[1]。単体では配布されておらず先述のSDKなどにcl.exeという実行ファイルで同梱されている。統合開発環境は有償となるがMicrosoft C/C++ Optimizing Compiler自体は無償で入手する事が出来る。
統語開発環境およびSDKとの関係
[編集]Microsoft C/C++ Optimizing Compilerは統合開発環境と強い関係があるが、統合開発環境とは独立しており異るバージョン体系を持っている。例えば同じバージョンのVisual C++でもバージョンが異る複数のMicrosoft C/C++ Optimizing Compilerを使うことができる。
Microsoft C/C++ Optimizing Compiler | 12.00.8168 | 13.00.9466 | 13.10.3077 | 13.10.6030 | 13.10.6030 | 13.10.6030 | 14.00.50727.762 | 15.00.30729.01 | 16.00.30319.01 | 17.00.51106.1 |
Microsoft C/C++-Standardcompiler | 13.00.9466 | 13.00.9466 | 13.10.3077 | |||||||
Microsoft Visual C++ | 6.0 | .NET | .NET 2003 | .NET 2003 | .NET 2003 | .NET 2003 | 2005 | 2008 | 2010 | 2012 |
Visual C++ Toolkit | 2003 | |||||||||
Visual C++ Compiler | ||||||||||
.NET Framework SDK | 1.0 | 1.1 | ||||||||
Windows SDK | ||||||||||
Platform SDK | ||||||||||
Windows WDK | ||||||||||
Windows DDK |
使用形態
[編集]Microsoft C/C++ Optimizing Compilerは主にMicrosoft社製の統合開発環境と一体で使用されるが、前述の統合開発環境と独立しているためMicrosoft C/C++ Optimizing Compiler単体でも使用することができる。またEclipseのようにMicrosoft社以外が開発した統合開発環境でも使用できる場合がある[2]。
言語
[編集]Microsoft C/C++ Optimizing Compilerは、C, C++, C++/CLIのソースコードを入力に受け付ける。C言語規格に関しては、バージョン15.00.30729.01の時点でANSI C89 (ISO C90, ISO/IEC 9899:1990) 対応[3]であり、C99には対応していない。C++言語規格に関しては、バージョン15.00.30729.01の時点でC++98 (ISO/IEC 14882:1998) 規格に対応している[4]。 バージョン16.00.30319.01では、auto、decltype、ラムダ式、rvalue reference(右辺値参照)、static_assert、nullptrなど、C++11規格で追加された機能を一部規格制定に先行して実装した[5]。 バージョン17.00.51106.1では、Strongly typed enums、Forward declared enums、Standard-layout and trivial types、Range-based for-loop などのC++11規格を実装した[6]。
主なコンパイラーの拡張
[編集]- インラインアセンブラー
- _asmや__asmキーワードによる記述。C++の標準規格で定められているasm文には対応していない。x64/IA64では使用できず、別途アセンブラーで記述するか組込関数で代替する。
- コンパイラーCOM対応
- #importディレクティブ及び追加のクラス・関数など。
- 属性
- マイクロソフトインターフェイス定義言語MIDLの属性を直接C++ソースコードに記述する機能。なお、マネージ拡張C++、C++/CLI、およびC++/CXの属性も同様の構文を使用する。
- マネージ拡張
- .NET Frameworkを使用するための拡張。マネージ拡張C++を参照。
- OpenMP
- バージョン14.00.50727.762からOpen MP 2.0に対応している[7]。
- ネイティブC++でのC++/CLI構文の使用
- for each[8]及びoverride, abstract, sealed[9]。このうち、overrideはC++11のoverrideと同様の構文である。また、sealedはC++11のfinalキーワードに相当する(sealed自体はさらにもとを辿ればマイクロソフト製のプログラム言語C#からの由来である)。バージョン17.00.51106.1では、sealed、finalのうちどちらでも使うことができるが、標準C++クラスにはfinalを、C++/CXのrefクラス(Windowsランタイムクラス)にはsealedを使うことが推奨されている[1]。
- Type Traits対応
- __is_podキーワードなど[10]。
- その他
- __declspec、呼出規約の指定、プロパティ構文(__declspec(property))、構造化例外処理、#pragmaディレクティブ、SAL注釈[11]など。
マネージ拡張C++
[編集]マネージ拡張C++ (Managed Extensions for C++、マネージドC++、Managed C++) は.NET Frameworkに対応したアプリケーションを作成するため、C++を共通言語仕様CLSに準拠させるために独自の拡張を施したものであり、バージョン13.00.9466以降に搭載されている。これに対し従来のC++をマネージドC++と区別する際にはアンマネージドC++あるいはネイティブC++と呼ぶ。1つのアプリケーション内にマネージドC++とアンマネージドC++のコードを混在させることも可能であり、従来のC++で書かれたコードを徐々に.NETへ移行したり、あるいは他の.NET言語からC++で作られたライブラリーを使用したり、C++コードから.NET Frameworkのクラスライブラリーを活用するなどといったことを可能にしている。
C++/CLI
[編集]C++/CLIは(文法に不明瞭な部分のあった)マネージ拡張C++に代わる、CLSを満たすC++を基にしたプログラミング言語であり、バージョン14.00.50727.762から搭載されている。ただしバージョン14.00.50727.762では(非推奨ではあるが)互換性維持のため従来のマネージ拡張C++のソースコードもコンパイルオプション「/clr:oldSyntax」を指定することでコンパイルできる[2]。なおC++/CLI環境では、従来のC++はアンマネージドではなくネイティブと形容される。
C++/CX
[編集]C++/CX (component extensions) は、Windowsストアアプリで使用されるWinRTランタイムライブラリーを利用するために、C++11規格をベースとして拡張されたプログラミング言語であり、バージョン17.00.51106.1に搭載されている。なお、言語構文は前述のC++/CLIとよく似ているが、C++/CXはC++/CLIとは違ってマネージ言語ではなく、ネイティブ拡張であるため、従来のネイティブC/C++用コードやCRTライブラリーはほぼそのまま利用できるが、.NET Frameworkを直接扱うことはできない。また、C++/CLIとは同一ソースコード内に共存できない。
- ^ https://docs.microsoft.com/ja-jp/cpp/how-to-report-a-problem-with-the-visual-cpp-toolset
- ^ https://www.ibm.com/developerworks/library/os-ecl-vscdt/
- ^ ANSI Conformance
- ^ “標準 C++ プログラムの作成 (C++)”. MSDN ライブラリー. マイクロソフト (2007年11月). 2009年12月1日閲覧。
- ^ Visual C++ 2010 の新機能
- ^ C++11 Features in Visual C++ 11
- ^ Visual C++ の OpenMP
- ^ How to: Iterate Over STL Collection with for each
- ^ How to: Declare Override Specifiers in Native Compilations
- ^ Compiler Support for Type Traits
- ^ SAL注釈