next up previous contents index
Next: ファイルの読み込み Up: コマンドと便利な機能 Previous: コメント

   
プリプロセッサ

      MATXは,Cプリプロセッサを呼び出すことによって,言語仕様の拡張を行なって いる。拡張された言語仕様のうち,最も良く使われる機能は,文字綴を任意の文字列 に置換するための#defineと別のファイルを読み込むための#include である。デフォルトで呼び出されるCプリプロセッサは,UNIXではcpp, Windowsでは各Cコンパイラ(例えばVisual C++の場合cl)であるが, 次に示すように別のプリプロセッサを環境変数MATXCPPに設定することが できる。

  setenv MATXCPP /usr/local/lib/gcc-lib/cpp


オプション-nocppを指定すると,Cプリプロセッサが起動されなくなる。 オプション-Dname=defによってCプリプロセッサに引数を渡せる。

また,インタプリタmatxの実行時には__MATX__が, コンパイラmatcの実行時には__MATC__が自動的に1に 定義される。これらを用いるとプログラム中の実行される箇所を インタプリタとコンパイラで容易に変更できる。例えば関数のデバッグ時に その関数をmatxでスクリプトとして実行したいとき以下のようすれば良い。 この例では,matxを実行するとプログラムはスクリプトとして実行され, A, B, Cは大域変数として定義されるので,コマンドライン からそれらを参照できる。matcを実行すれば,関数afo()が定義さ れる。


  #ifdef __MATC__
  Func void afo()
  {
  #endif
     Matrix A,B,C;

     A = [[1 2][3 4]];
     B = [[5 6][7 8]];
     C = A + B;
     print A,B,C;
  #ifdef __MATC__
  }
  #endif


また,以下の例(関数がafo.mmというファイルに含まれるとする) ではmatxをコマンドラインから


  % matx afo.mm -e 'main();'


のように起動するのと同じ結果得られる。 matcでコンパイルするとき,関数afo()のみが定義され, ``main();''は無視される。



  Func void afo()
  {
     Matrix A,B,C;

     A = [[1 2][3 4]];
     B = [[5 6][7 8]];
     C = A + B;
     print A,B,C;
  }
#ifdef __MATX__
  main();
#endif




 

Masanobu KOGA 平成10年8月19日