プリプロセッサの条件付きコンパイル ディレクティブを使用している次のコードがあります。
#define foo
#define bar
#ifdef foo || !bar
extern bool Verbose = FALSE;
#else
extern bool Verbose = TRUE;
#endif
void start() {
}
次のエラーのため、コンパイルされません。
test.mq4(3,12) : エラー 175: '
||
' - グローバル スコープでは式を使用できません
ただし、最初の行(foo)がコメントアウトされている場合、コードは正常にコンパイルされます。その場合(fooが定義されていない場合)、コンパイラはグローバルスコープでこの式を許可しているようです。
コンパイラを使用して上記のコードをmql
コンパイルしてみることができます(Linux で使用wine
):
mql.exe /mql4 test.mq4
質問は次のとおりです。
なぜこれが機能しないのですか? また、上記のプリプロセッサ条件 ( )を適切な方法で
定義するにはどうすればよいですか?foo || !bar
次の構文も試しました。
#if defined (foo) || defined (!bar)
user2357112 ( GNU cpp syntax )によって以前に提案されたように、次のエラーで失敗します。
エラー 109: '
#if
' - プリプロセッサ コマンドが無効ですエラー 149: '
#else
' - 予期しないトークン
これは、MQL 構文が完全に異なり、これらの種類のプリプロセッサ コマンドをサポートしていないためです。