前置處理指示詞(Preprocessor Directives)是在MQL5程式語言中用於控制編譯過程的特殊指令。它們以#字符開始,並且在實際編譯程式碼之前進行處理。這些指示詞提供了一種方便的方式,可以在編譯時對程式碼進行條件編譯、文件包含、符號定義等操作。接下來就來說明他們的用法與範例。
#property指令通常用於定義程式屬性,像是描述性資訊、腳本、文檔庫...。而這些屬性則會在EA屬性對話方塊的「普通」中顯示。
這個指令通常放在程式的最頂端。
#property copyright "Copyright 2023, SHINICHICKEN."
#property link "https://shinichicken.com"
#property version "1.00"
#property description "My test EA"
產生效果如圖:
(一) #define
指令用於定義常量或巨集,習慣上會使用全部大寫字母作為識別字名稱。
#define PI 3.1415926535926 // 定義圓周率的數值常量
#define LOT_SIZE 0.01 // 定義交易手數的數值常量
#define WELCOME_MESSAGE "歡迎來到交易平台" // 定義歡迎消息
他還有一個變式稱為參數形式,可以定義函數運算之類的。
#define SQUARE(x) (x * x) // 定義計算平方
#define SWAP(a, b) {double tmp = a; a = b; b = tmp;} // 定義變數交換
//使用定義函數:
double area = SQUARE(5.0); // 結果將是 25.0
double m = 5.0;
double n = 10.0;
SWAP(m, n); // 現在 m 的值是 10.0,n 的值是 5.0
(二) #ifdef
用於檢查指定的標識符是否已經被定義。如果標識符已經被定義,則執行相關的代碼塊;否則,可以執行另一個代碼塊或者忽略這部分代碼。這對於在不同的編譯條件下啟用或禁用特定代碼塊非常有用。
#define DEBUG_MODE // 定義調試模式
#ifdef DEBUG_MODE
// 在調試模式下執行的代碼
Print("這是調試消息");
#else
// 在正常模式下執行的代碼
Print("這是正常消息");
#endif
#include用於在源文件中導入外部文件,通常是頭文件(header files)或其他源文件。這使得在一個源文件中可以使用其他文件中定義的內容,這樣可以實現代碼的模組化和可重用性。
這個指令有兩種變式,分別為
#include <123.mqh>,#include"123.mqh"
前者會尋找 MT5資料夾/MQL5/include 子資料夾的檔案,通常這些檔案包含了函數聲明、類定義、常量等信息。
而後者只會查找與程式檔在相同目錄的檔案。通常用來導入自定義文件,這有助於將代碼拆分為多個文件,使其更具組織性和可維護性。
#import用於將外部動態連結庫(DLL)中的功能引入到MQL5代碼中。使我們可以使用外部庫中的函數,擴展MQL5的功能,並與其他程式語言進行交互。
#import "MyLibrary.dll"
int MyFunction(int parameter1, double parameter2);
void AnotherFunction();
#import
用於設置特定編譯選項或控制編譯過程的指令。在MQL5中,#pragma 用於控制編譯器的行為,以確保代碼以特定的方式進行編譯。
#pragma once //避免重複包含
#pragma strict //啟用嚴格模式
#pragma warning(disable: 4018) //控制編譯器警告的輸出(即禁用4018警告的輸出)
#pragma optimize(3) //控制代碼的優化級別
今天就分享到這邊啦,連上六天班的各位都辛苦了,這次就早點發文,大家也早點休息,畢竟只休一天又要上班上課了。