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


CとC++コードが似ている理由

 本連載では、次のようなC++ソースコードを紹介し、コードの意味と背景をじっくり考えています。
#include <iostream>

int main()
{
  const std::string ch0 = "Typical: I don't know anything about programming!\n";
  const std::string ch ("Simplified form: I don't know anything about programming!\n");
  const std::string* ch1 =  new std::string ("Pointer form: I don't know anything about programming!\n");

  std::cout << "Popular: I don't know anything about programming!" << std::endl;
  printf(ch0.c_str());

  std::cout << ch.data();
  std::cout << ch1->data();
  std::cout << ch.c_str();
  std::cout << ch1->c_str();

  std::cout.write(ch.c_str(), ch.size());
  std::cout.write(ch1->c_str(), ch1->size());
  return int(0);
}
 私たちは、このC++ソースコードから、次のような印象を持つこともこれまで確認してきました。すでに説明済みの項目は、打ち消されています。

印象1:とにかく難しい!
印象2:Cのソースコードとどこか似ている
印象3:#includeに続くiosteamという意味が分からない
印象4:stdio.hがないにもかかわらず、printf関数が呼び出されていることが不思議だ!
印象5:std::coutのstdの意味が分からない
印象6:std::coutの「::」の意味が分からない
印象7:std::coutのcoutの意味が分からない
印象8:「<<」の意味が分からない
印象9:std::endlのendlの意味が分からない
印象10:「std::string ch」のstringの意味が分からない
印象11:「std::string ch」のchの意味が分からない
印象12:ch.data()の意味が分からない
印象13:ch.c_str()の意味が分からない
印象14:std::cout.writeの意味が分からない
印象15:ch.size()の意味が分からない
印象16:std::string*の「*」の意味が分からない
印象17:std::string* ch1の「ch1」の意味が分からない
印象18:ch1->data()の意味が分からない
印象19:ch1->c_str()の意味が分からない
印象20:ch1->size()の意味が分からない

 今回は、「印象2:Cのソースコードとどこか似ている」を考えます。それでは、上のC++ソースコードから「Cのソースコードとどこか似ている」コードを抜き出し、小さなC++プログラムを作ってみましょう。たとえば、次のようなプログラムはいかがでしょうか。
#include <iostream>

int main()
{
  const std::string ch0 = "I don't know anything about programming!\n"; // C++標準stringクラス
  int ret = printf("%s", ch0.c_str()); // C関数とC++の「オブジェクトとメソッド」
  if (ret == int(ch0.size())) // かなりC++的です。人間的な発想から分かりやすいコードが書けます。
  {
     return int('A'-'A'); // なんとなくC的ですね。このコードは0を返します。
  }
  else
  {
     return int('A'-'B'); // なんとなくC的ですね。このコードは-1を返します。
  }
}
 ご覧のように、このC++プログラムは、次のようなC概念とC++概念で構成されています。

・C++のクラス
・Cの関数
・C++の「オブジェクトとメソッド」

 この小さなC++プログラムは、確かに、「Cのソースコードとどこか似ている」ということを証明してくれています。と同時に、次のこともしっかり証明してくれています。

 "この小さなプログラムの作成者は、C++をベターC、として使っている!"

 C++コードがCコードに似ているのは当然です。C++はCの遺産を最大限継承する方向で設計・実装されているからです(参考連載)。C++を設計したBjarne Stroustrup氏は、CとC++の相違を尋ねられ、このような回答をインターネットから一般公開しています。お時間のあるときぜひ目を通しておきたいところです。

前へ | 次へ




 WinDbg入門  ホーム


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