Share via


Visual C++ 入門

~ネイティブ 、マネージ、混合を使いこなす!! ~

更新日: 2011 年 5 月 23 日


Visual C++、略してVC++。Windows 上のプログラムを書いたことのある開発者なら知らない人はいないでしょうし、Windows のプログラムを書いたことがなくても一度は聞いたことがある名前でしょう。しかし、歴史的経緯も含め、VC++ を取巻く技術の多さから、VC++ の全体像を正しく把握している方は、意外と少ないものです。このドキュメントでは、VC++ とは何かを改めて皆さんにご理解いただくために、最新の姿を解説します。

VC++ という名称は、狭義には C++ 言語にマイクロソフトの拡張を加えたプログラミング言語を指し、広義には VC++ でアプリケーションを開発するのに必要な各種ライブラリ、及び、VC++ プログラムを作成する為の統合開発環境 (IDE) を包含します。

VC++ は、MS-DOS 用 C/C++ コンパイラを起源に、Windows プラットフォーム向けの開発言語として Windows プラットフォームの成長と共に 40 年近くの歳月をかけて連綿と拡張が続けられたプログラミング言語です。

図 1: Visual C++ の歴史

VC++ のプログラミング言語としての仕様は、 リファレンス [2] を読んでいたくとして、ここでは、VC++ がどのように使われるかという、開発者の視点から解説していきます。

VC++ の使い方は大別すると、以下の 3 つに分類できます。

  1. Win32/COM API、MFC/ATL を使ったネイティブ プログラム開発用
  2. .NET Framework を使ったマネージ プログラム開発用
  3. 標準 C/C++ プログラム開発用

1. Win32/COM API、MFC/ATL を使ったネイティブ プログラム開発用

1 番目は、Windows が提供する機能をフル活用したプログラムを開発する手段としての VC++ です。ネイティブ プログラムとは、一般的な C/C++ がそうであるように、作成したプログラムが CPU 上で直接実行可能なバイナリ コードにコンパイルされ、高速実行されるプログラム形式です。Windows の諸機能はネイティブ プログラミングで利用することを前提とした Win32 API や COM (Component Object Model) のライブラリを通じて提供されます。ネイティブ プログラムで開発すると、Windows の機能をフルに使った高速なアプリケーションを開発可能です。また、ユーザー独自機能を COM で作成する場合には ATL (Active Template Library) を利用し、GUI を活用したアプリケーションを作成するには MFC (Microsoft Foundation Class) を利用します。

図 2: ネイティブ コードによる、Windows アプリケーション開発

Visual C++ によるアプリケーション開発で最も多いのがこの使い方でしょう。この使い方では、VC++ の言語仕様だけでなく、Win32/COM の各種 API、及び、MFC、ATL のライブラリやフレームワークの知識が必須です。また、ATL や MFC を利用する場合には、Visual Studio が提供する様々な開発支援機能を使ってプログラムを開発することになります。ですから、Visual Studio の IDE 機能の知識も必要です。

2. .NET Framework を使ったマネージ プログラム開発用

2 番目の使い方は、2002 年に導入された .NET Framework を使ったプログラムを作成する手段としての VC++ です。この使い方では、作成したプログラムは、C# や Visual Basic と同様、一旦中間コードにコンパイルされ、実行時、.NET Framework の共通言語ランタイム (CLR: Common Language Runtime) 上で実行されます。この形式をマネージ プログラムと呼びます。

図 3: マネージ コードのコンパイルと実行

VC++ には、.NET Framework を使うための言語仕様拡張が行われています。VC++ でマネージ プログラムを作成するには、.NET Framework に関する知識が必要です。マネージ拡張された VC++ は、VC++/CLI: Common Language Infrastructure と名づけられています。しかし、実際には VC++ のマネージ コードでアプリケーションの全てを開発するのは稀です。VC++ は、単にネイティブとマネージという 2 種類のプログラムが作成できるだけでなく、ネイティブとマネージのコードの混在が可能です。単にプログラムの記述上混在ができるだけでなく、デバッグ時においても、ネイティブ コードとマネージ コードをシームレスに行き来してのデバッグが可能です。
この機能を使って、ネイティブ コードで実装した高速な各種アルゴリズム処理や、ハードウェアに近い処理コードをマネージ コードで包み、マネージのインターフェイスを定義した部品化が可能です。作成した部品ライブラリは、C# や Visual Basic のプログラムの中で利用可能です。Windows アプリケーションの開発では、この特徴を活用して、パフォーマンスが重要な部分はネイティブ コードで、ユーザー インターフェイスやネットワーク処理など生産性が重要な部分はマネージ コードで、アプリケーションを構成するのが定石です。

図 4: Windows アプリケーション アーキテクチャ

3. 標準 C/C++ プログラム開発用

3 番目は、標準 C/C++ のプログラムを開発する手段としての VC++ です。この使い方に該当する代表的なケースは以下の通りです。

  • UNIX 系で動いていたプログラムを Windows に移植する
  • 標準 C/C++ への準拠が開発要件として決められている
  • Windows 以外の OS で動作するプログラムの開発環境として使う

標準 C/C++ のプログラムを開発する場合、VC++ の言語仕様が ANSI や ISO 等で決められている C/C++ の標準にどの程度準拠しているかが問題になります。VC++ は、C 言語標準の ISO C90 に、C++ 言語標準の C++98 と C++0x (1 部) に対応し、それらに対応した C 言語の標準ライブラリや C++ の STL も用意されています。

他に、マルチプロセッサ環境で並行性を活用する為の標準である、OpenMP にも VC++ は対応しています。

プログラムを開発する環境の OS と、実際にプログラムが動作する OS が異なるソフトウェア開発携帯を、クロス プラットフォーム開発と呼びます。このケースでは、VC++ 独自拡張仕様を使わず、C/C++ の標準言語仕様のみを用いて C/C++ プログラムを作成します。C/C++ の言語仕様自体がコンパイラや実行環境の実装に依存する部分もあるため、若干の注意は必要ですが、開発ターゲットの C/C++ コンパイラが特殊な言語仕様でない限り、問題にはならないでしょう。このケースでは、2 番目に挙げたネイティブとマネージ コードの混在をうまく利用したテスト用スタブやドライバーによる、プログラムロジックの綿密なテストといった利用方法もあります。

図 5: ネイティブとマネージ コードの混合開発によるテスト環境

以上、VC++ について、主に使い方の観点から解説してきました。VC++ の全貌がお判りいただけたでしょうか。文中で挙げた用語のそれぞれの詳細は、文末の参考資料をご参照ください。

Visual Studio には、テストや構成管理、自動ビルド、プロジェクト管理を系統的に支援する機能が数多く用意されています。これらの機能は、信頼性の高いアプリケーションをチームで開発するにはこれらの支援機能は欠かせないものです。Visual Studio を単に C/C++ のプログラミング環境としてお使いいただくだけでなく、これらの機能も併せて活用し、皆さんの開発活動にお役立てください。

ページのトップへ