2010年5月6日木曜日

★C++と似ているところ、Cと違うところ
Be Carefull, Llike C++ Not Like C


MQL4(MetaQuotes Language 4)はC/C++ライクな言語となっているが微妙/結構違うところもある。
ここではC++と似ているところ、Cと似てないところ/気をつけなければいけないところを あげてみたいと思う。

まず、数少ないMQL4C++と似ているところ。
  • "//"以降がコメント。
  • 論理型(bool)が使える。
  • 参照(&)が使える。
  • 関数のデフォルト引数が使える。
  • 文字列型(string)があり、加算(s1+s2 や s1+i など)ができる。(演算子のオーバーロード的な感じ)
くらいか。
次にCと違っていて気になるところ/注意しなければいけないところ。
  • 演算子の優先順位が違う。特に論理和と論理積の順位が逆。(参照: MQL4 の落とし穴 ‐ 演算子の優先順位)
  • return(式)と、returnで値を返す場合には必ず括弧が必要。
  • 条件式において各式は必ず評価される(打ち切られない)。
    (A && B && C の場合、Aの評価結果がfalseだとしても B、C が必ず評価される、 Pascal的な動作となっている)
  • キャスト((double)i など)ができない。(エラーにはならず、無視される)
  • 変数のローカルスコープがない。(ブロック内で定義した変数は以降ブロックの外でも有効)
  • グローバル変数の初期化部分に式が使えない。(マクロとからめて int x = X + 1; とかできないのでとても不便)
また、C/C++との違いということだと、
  • 前置++/--ができない。(i++はできるが++iはできない)
  • ポインタがない。
  • 3項演算子がない。(a ? b : cができない)
  • char/short/long/float、signed/unsignedなどがない。
  • struct、typedefもない。
もっとあったと思うが思いつくところだととりあえずこんなところか。
(随時追記予定)

2 件のコメント:

  1. あと
    long intとか宣言出来ないみたいです。MQL5は対応してるみたいですが

    返信削除
  2. 型とかでいうと、char/short/float、signed/unsignedとかもないですな。
    Cとの違いということでちょっと追記しておきます。

    返信削除