● C言語とC++言語の役割


■ 本書が計算物理にC/C++言語を使う理由

かつては計算物理関連のプログラムはすべて FORTRAN言語で 設計されていましたが、最近では計算対象の複雑化や計算以外のプログラム の必要性から、柔軟性 拡張性 汎用性に優れた C言語またはC++言語で 計算物理関連のプログラムを設計することが増えてきました。 FORTRANとC++の長所短所を以下に紹介します。

  1. 言語の文法の習得時間はFORTRANのほうがC++より短時間で済む。
  2. FORTRAN言語を習得してもC++言語や他の最近の言語を習得するのは 楽ではいが、C++言語を習得したらFORTRAN言語も他の最近の言語 も1日で習得することができる。
  3. 同じ計算内容のプログラムでも、FORTRANで記述したもののほうが C++で記述したものより実行時間が短時間で済む。
  4. 複雑な内容のプログラムでは、C++で記述するほうが FORTRANで記述するより開発時間が短時間で済む。
  5. 数値計算関連の便利な関数を集めたライブラリには、 FORTRAN製のほうがC++製よりも多い。
  6. FORTRAN製のライブラリをC++で記述するプログラムから 利用することができる。
  7. FORTRANは数値計算以外の分野では使われていないが、 C++はすべての分野のプログラムで使われている。

3番目の事実は FORTRANが現在も存命する最大の根拠ですが、 4番目の事実も考慮するとどうなるでしょう。例えば、 FORTRANでは 開発に1年、実行に1日かかるプログラムが C++では開発に半年、実行に 2日かかるとしたら、あなたはどちらで開発するでしょうか。

3番目の事実はC/C++言語利用者にとっては コンパイラ開発者に 頑張って解決してもらいたいですが、今後しばらくはFORTRAN優位が 続くようです。なぜならFORTRANコンパイラの効率改善の研究の方が C++の研究より多くの研究資金と研究者が動員されているからです。 将来、計算物理におけるC/C++言語利用者が増えることで、この研究状況も 変わるでしょう。

5番目の魅力も6番目の事実があるため実は魅力ではありません。

そして今、言語を学び始めようとしているあなたは将来どのような プログラムを作るか未知なのですから、例え1番目の事実があっても2番目と 7番目の事実により、今、C++を学び始める方が得策なのです。


■ C言語とC++言語の汎用性と非汎用部分

C言語やC++言語の文法は ANSIと呼ばれる委員会がその規格を 定めています。さまざまなマシンやOS用にこの ANSI規格に基づいた コンパイラが提供されています。
つまり ANSI規格に従ったC言語やC++言語でプログラムを作れば、 そのプログラムを workstation でも personal computer でも、また、 UNIXでも でも Windows95 でも Mac-OS でも、コンパイルして 実行させることができるのです。
ただし、ANSIはC言語関連のものすべての統一規格を定めたわけでは ないので、環境によって仕様が異なる部分もあります。 特にグラフィック関連の仕様は環境依存が激しいため、 C言語の言語仕様には全く含められていません。 そのためコンパイラやOSが提供するグラフィックライブラリを利用する のですが、これの仕様はライブラリごとに全く異なります。
近年ではこのグラフィックライブラリの仕様を統一すべく、OpenGLと 呼ばれる規格がソフトウェア業界の間で定められ、種々のOS用に この規格にそったグラフィックライブラリが提供されています。

このようにC言語やC++言語は汎用なのですが、実際これでプログラムを 作る場合には、コンパイルする環境によって若干問題が生じます。
本書で解説するC/C++言語の文法はグラフィックの部分を除いて ANSI規格の範囲内ですのでこの部分については現在主流の3大OSの UNIX, MS-Windows, Mac-OSのどれでも期待通りに動作すると思います。 しかし筆者はこのうちUNIXのいくつかでしか動作を確認していません。
グラフィックについては UNIXの XWindow Systemの Xlib ライブラリ を利用することを想定して解説していますので、これ以外の環境では 本書で解説するグラフィック関連のプログラムは全く利用できません。


■ C言語とC++言語の関係

C++言語はC言語を基本としてこれを大幅に拡張した別な言語です。 C言語を基本としているのでC言語で記述されたプログラムをC++言語として 取り扱うこともほぼ可能です。もちろん逆は不可です。
C++言語ではC言語には無かった便利な文法が色々あります。また 現在のプログラミングスタイルの主流であるオブジェクト指向の考え方に 合ったプログラムを構築するための「クラス」を始めとした 様々な概念や機構が備わっています。
最近のC言語コンパイラはC++言語コンパイラも兼ねる場合が多いので 本書のプログラムはすべてC++コンパイラでコンパイルされることを 想定しています。紹介する文法もC++文法です。ですがC++の主な機能 であるクラスをあまり利用していないので、実はC言語に非常に近い プログラムスタイルのC++言語を本書では解説することになります。


  • 次へ
  • 目次
    Copyright(C) by Naoki Watanabe. Oct 21st, 1995.
    This page was modified on Aug 3rd, 1998.
    渡辺尚貴 naoki@cms.phys.s.u-tokyo.ac.jp