ビジネス WinDbgアプリケーション開発技術 イメージロード(ユーザモードとカーネルモード)


無料開発ツール「Visual C++ 2005 Express Edition」と国際標準C++仕様の関係

 無料化された「Visual C++ 2005 Express Edition」(VCEE)は、前回触れたように、Microsoft固有のATLとMFC(クラス階層)をサポートしていません。いくつかの回避策を講じれば、それらのMicrosoft固有のクラス階層を利用できるようになるようですが、はっきり申し上げれば、そのようなことはどうでもよいことでしょう。Microsoftの固有クラス階層を再利用したければ、上位版開発環境製品を購入するのが筋であり、開発現場では当然そうしているはずです。

 さて皆さん、無料提供のVCEEに何を期待しますか。筆者は、標準仕様への準拠意欲です。この投稿記事はたいへん面白い問題点を提起しています。投稿記事には、次のようなソースコードが掲載されています。
#include <iostream>
class FooClass
{
public:
  FooClass(const std::string _str):data(_str){};
  ~FooClass(){};
  std::string data;
};

void FooBar(const FooClass& cls)
{
  std::string data = cls.data + "abc";
}

int main(void)
{
  FooClass cls("abc");
  FooBar(cls);

  return 0;
}
 記事の投稿者は、このソースコードをVCEE環境でビルドするとエラーが出ると主張しています。その主張に対して、ドイツ人VC++ MVPであるRichter氏は、自分の環境ではエラーを再現できない!、と回答しています。ところが、別の人は"エラーが出る"と主張し、議論が白熱していきます。筆者もこのソースコードをVCEE環境でビルドしてみましたが、エラーが出ました。そして、次のようにソースコードの一部を修正することにより、正常にビルドできるようになりました。
#include <iostream>
#include <string> // Added By Takashi Toyota

class FooClass
{
public:
  FooClass(const std::string _str):data(_str){};
  ~FooClass(){};
  std::string data;
};

void FooBar(const FooClass& cls)
{
  std::string data = cls.data + "abc";
  std::cout << data.data() << std::endl; // Added By Takashi Toyota
}

int main() // Changed by Takashi Toyota
{
  FooClass cls("abc");
  FooBar(cls);

  return 0;
}
 議論は加熱し、途中参加の投稿者とMicrosoftのコンパイラー開発者間の感情的な議論にまで発展します。"C++標準仕様に準拠していない!"、"いや、標準仕様はそこまではっきり述べていない!"などのやり取りが2人の間で交わされます。筆者はその議論の様子を静かに見守っていたのですが、次のようなことを感じないわけにいきませんでした。

 "交わされているのは技術詳細であり、それほど意味のあることではない。そもそもこのような発想に乏しいC++ソースコードを書くべきではないのではないか!"

 筆者なら、おそらく、次のような、あくまでも"標準ライブラリ提供クラスベースの"コードを書くことでしょう。
#include <iostream>
#include <string>

class FooClass
{
public:
  FooClass(const std::string _str):data(_str){};
  ~FooClass(){};
  std::string data;
};

void FooBar(const FooClass& cls)
{
 std::string data = " abc";
 data.insert(0,cls.data.data());
 std::cout << data.data() << std::endl;
}

int main()
{
  FooClass cls("abc");
  FooBar(cls);

  return 0;
}
 皆さんは、どのようなソースコードを書きますか?なお、上記ソースコード内のdata()メソッドについては、こちらの記事が参考になるかもしれません。
前へ | 次へ



 WinDbg入門  ホーム


Copyright©豊田孝 2004- 2009
本日は2009-01-06です。