変数

変数の宣言

変数は、使用する前に宣言する必要があります。変数を識別するためには、一意の名称が使用されます。変数を宣言するには、型と一意の名称の指定が必要です。変数の宣言は演算ではありません。

基本データ型は下記の通りです。

  • char、short、int、long、uchar、ushort、uint、ulong の 整数
  • color – RGB 色を表す整数
  • datetime – 日時(1970年1月1日0時からの秒数を含む符号なしの整数)
  • bool – ブール値(truefalse
  • double – 倍精度浮動小数点数
  • float – 単精度浮動小数点数
  • string – 文字列

例:

string szInfoBox;
int    nOrders;
double dSymbolPrice;
bool   bLog;
datetime tBegin_Data   = D'2004.01.01 00:00';
color    cModify_Color = C'0x44,0xB9,0xE6';

複雑または複合型は次の通りです。

構造体は、他の型を使用して構築された複合データ型です。

struct MyTime
 {
  int hour;   // 0-23
  int minute; // 0-59
  int second; // 0-59
 };
...
MyTime strTime; // 以前に宣言された MyTime 構造体の変数

構造体を宣言するまで、その構造体型の変数を宣言することは出来ません。

配列

配列は同じ型のデータをインデックス付きで収めます。

int    a[50];       // 50 の整数の 1 次元配列
double m[7][50];   // 7 列の 2 次元配列
                  // 各列が 50 の数を含む
MyTime t[100];     // MyTime のような要素を含む配列

配列のインデックスとなれるのは整数のみです。4 次元以下の配列のみが使用可能です。配列要素の番号付けは 0 から始まります。1 次元配列の最後の要素は、配列のサイズより 1 小さいインデックスを有します。例えば 50 の整数からなる配列の最後の要素の呼び出しは a[49] となります。多次元配列の次元も同じように 0 から次元サイズ−1までのインデックスを持ちます。例の 2 次元配列の最後の要素は m[6][49] となります。

静的配列は時系列としては表すことが出来ません。末尾から先頭に向かっての配列要素アクセスを設定する ArraySetAsSeries() 関数は静的配列に適応出来ません。時系列と同じアクセスを提供する場合には動的配列オブジェクトが使用されるべきです。

配列の範囲以外のアドレス指定がされた場合、実行するサブシステムは重大エラーを発生し、プログラムが停止されます。

アクセス指定子

アクセス指定は、コンパイラが変数や構造体やクラスのメンバにアクセスする方法を定義します。

const 指定子は、変数を定数として宣言し、実行時の変更を不可能にします。宣言時には、変数の単一の初期化が許可されます。

例:

int OnCalculate (const int rates_total,     // price[] 配列のサイズ
                const int prev_calculated, // 以前の呼び出しで処理されたバー
                const int begin,           // 重要データの開始点
                const double& price[]       // 計算対象の配列
  );

構造体やクラスのメンバにアクセスするには次の修飾子を使用します。

  • public – 変数やクラスメソッドへの無制限のアクセスを許可します。
  • protected – このクラスのメソッド、またpublic で継承されたクラスからのアクセスを許可します。その他のアクセスは不可能です。
  • private – 同じクラスのメソッドからのみの変数やクラスメソッドへのアクセスを許可します。
  • virtual – クラスメソッドのみ(構造体のメソッドは含まない)に適用され、クラスを仮想関数のテーブルに配置する必要があるとコンパイラに指示します。

ストレージクラス

ストレージクラスは 3 つあります。staticinput 及び externです。これらのストレージクラス修飾子は、対応する変数がグローバルプールと呼ばれるメモリの事前割り当て領域に分布していることをコンパイラに明示的に指示します。また、これらの修飾子は、可変データの特殊な処理を示します。ローカルレベルで宣言した変数が static でない場合、そのような変数のためのメモリはプログラムスタックに自動的に割り当てられます。配列が宣言されたブロックの視認性の領域を越えると、非静的配列に割り当てられたメモリの解放が自動的に行われます。

参照

データ型型のカプセル化と拡張性変数の初期化変数のアクセス権スコープとライフタイムオブジェクトの作成と解徐クラスの静的メンバ