Bao gồm tệp mã nguồn (#include)
Chỉ thị #include
được sử dụng để chèn nội dung của một tệp khác vào mã nguồn. Chỉ thị này tạo ra hành động tương tự như khi lập trình viên sao chép văn bản từ tệp được bao gồm vào clipboard và dán nó vào tệp hiện tại tại vị trí sử dụng chỉ thị.
Việc chia mã nguồn thành nhiều tệp là một thực hành phổ biến khi viết các chương trình phức tạp. Những chương trình như vậy được xây dựng trên cơ sở mô-đun, sao cho mỗi mô-đun/tệp chứa mã liên quan logic để giải quyết một hoặc nhiều nhiệm vụ liên quan.
Các tệp bao gồm cũng được sử dụng để phân phối thư viện (tập hợp các thuật toán đã sẵn sàng). Cùng một thư viện có thể được bao gồm trong các chương trình khác nhau. Trong trường hợp này, việc cập nhật thư viện (cập nhật tệp tiêu đề của nó) sẽ tự động được áp dụng trong tất cả các chương trình trong lần biên dịch tiếp theo của chúng.
Nếu các tệp chính của chương trình MQL phải có phần mở rộng .mq5
, thì các tệp bao gồm thường có phần mở rộng mqh
('h' ở cuối từ nghĩa là "header" - tiêu đề). Đồng thời, việc sử dụng chỉ thị #include
cho các loại tệp văn bản khác là được phép, ví dụ như *.txt
(xem bên dưới). Trong mọi trường hợp, khi một tệp được bao gồm, chương trình cuối cùng kết hợp từ tệp .mq5
chính và tất cả các tiêu đề vẫn phải đúng về mặt cú pháp. Ví dụ, việc bao gồm một tệp chứa thông tin nhị phân (như hình ảnh .png
) sẽ làm hỏng quá trình biên dịch.
Có hai loại câu lệnh #include
:
#include <file_name>
#include "file_name"
2
Ở loại đầu tiên, tên tệp được bao quanh bởi dấu ngoặc nhọn. Trình biên dịch tìm kiếm các tệp như vậy trong thư mục dữ liệu của terminal, trong thư mục con MQL5/Include/
.
Đối với loại thứ hai, với tên trong dấu ngoặc kép, việc tìm kiếm được thực hiện trong cùng thư mục chứa tệp hiện tại sử dụng câu lệnh #include
.
Trong cả hai trường hợp, tệp có thể nằm trong các thư mục con bên trong thư mục tìm kiếm. Trong trường hợp này, bạn nên chỉ định toàn bộ hệ thống phân cấp thư mục tương đối trước tên tệp trong chỉ thị. Ví dụ, cùng với MetaTrader 5, có nhiều tệp khởi động được sử dụng phổ biến, trong đó có DateTime.mqh
với một tập hợp các phương thức làm việc với ngày và giờ (chúng được thiết kế dưới dạng cấu trúc, các cấu trúc ngôn ngữ mà chúng ta sẽ thảo luận trong Phần 3 dành cho OOP). Tệp DateTime.mqh
nằm trong thư mục Tools
. Để bao gồm nó trong mã nguồn của bạn, bạn nên sử dụng chỉ thị sau:
#include <Tools/DateTime.mqh>
Để thể hiện cách bao gồm một tệp tiêu đề từ cùng thư mục với tệp nguồn chứa chỉ thị, hãy xem xét tệp Preprocessor.mq5
. Nó chứa chỉ thị sau:
#include "Preprocessor.mqh"
Nó đề cập đến tệp Preprocessor.mqh
, thực sự nằm cạnh Preprocessor.mq5
.
Một tệp bao gồm có thể, đến lượt nó, bao gồm các tệp khác. Đặc biệt, bên trong Preprocessor.mqh
có mã sau:
double array[] =
{
#include "Preprocessor.txt"
};
2
3
4
Điều này có nghĩa là nội dung của mảng được khởi tạo từ tệp văn bản đã cho. Nếu chúng ta xem bên trong Preprocessor.txt
, chúng ta sẽ thấy văn bản tuân theo các quy tắc cú pháp khởi tạo mảng:
1, 2, 3, 4, 5
Do đó, có thể thu thập mã nguồn từ các thành phần tùy chỉnh, bao gồm cả việc tạo nó bằng các chương trình khác.
Lưu ý rằng nếu tệp được chỉ định trong chỉ thị không được tìm thấy, quá trình biên dịch sẽ thất bại.
Thứ tự bao gồm nhiều tệp quyết định thứ tự xử lý các chỉ thị tiền xử lý trong chúng.