기타 연산

인덱싱 ( [] )

배열의 i번째 요소를 지정할 때 표현식 값은 일련 번호 i를 가진 변수의 값입니다.

예제:

array[i] = 3// 배열의 i번째 요소에 값 3을 할당합니다.

정수만 배열의 인덱스가 될 수 있습니다. 4차원 이하 배열이 허용됩니다. 각 차원은 0부터 차원 크기-1까지 인덱싱됩니다. 특히, 50개의 요소로 구성된 1차원 배열의 경우, 첫 번째 요소에 대한 참조는 array [0]처럼 보이고 마지막 요소에 대한 참조는 array [49]입니다.

어레이를 벗어나 주소를 지정하면 실행 중인 하위 시스템이 심각한 오류를 생성하고 프로그램이 중지됩니다.

x1, x2, ..., xn 인수를 사용하여 함수 호출

각 변수는 해당 유형의 상수, 변수 또는 식을 나타낼 수 있습니다. 전달된 인수는 쉼표로 구분되며 괄호 안에 있어야 하며, 여는 괄호는 호출된 함수의 이름 뒤에 와야 합니다.

표현식 값은 함수에 의해 반환되는 값입니다. 반환 값이 void 유형인 경우 할당 작업에서 이러한 함수 호출을 오른쪽에 배치할 수 없습니다. x1, ..., xn 식이 정확히 이 순서로 실행됩니다.

예제:

   int length=1000000;   
   string a="a",b="b",c;
//---기타 연산
   int start=GetTickCount(),stop;
   long i;
   for(i=0;i<length;i++)
     {
      c=a+b;
    }
   stop=GetTickCount();
   Print("time for 'c = a + b' = ",(stop-start)," milliseconds, i = ",i);

콤마 연산 ( , )

쉼표로 구분된 표현식은 왼쪽에서 오른쪽으로 실행됩니다. 오른쪽 식을 계산하기 전에 왼쪽 식 계산의 모든 부작용이 나타날 수 있습니다. 결과 유형 및 값이 우측 식과 일치합니다. 전달될 매개변수 목록(위 참조)을 예로 들 수 있습니다.

예제:

for(i=0,j=99; i<100; i++,j--) Print(array[i][j]);

도트 연산자 ( . ) #

구조 및 클래스의 직접 공용 멤버에 대한 액세스의 경우 도트 연산이 사용됩니다. Syntax:

Variable_name_of_structure_type.Member_name

예제:

   struct SessionTime
     {
      string sessionName;
      int    startHour;
      int    startMinutes;
      int    endHour;
      int    endMinutes;
     } st;
   st.sessionName="Asian";
   st.startHour=0;
   st.startMinutes=0;
   st.endHour=9;
   st.endMinutes=0;

범위 지정 연산 ( :: ) #

mql5 프로그램의 각 기능에는 자체 실행 범위가 있습니다. 예를 들어, Print() 시스템 함수는 전역 범위에서 수행됩니다. Imported 함수는 해당 가져오기 범위 내에서 호출됩니다. classes의 메서드 함수는 해당 클래스의 범위를 가집니다. 범위 지정 연산의 구문은 다음과 같습니다:

[Scope_name]::Function_name(parameters)

범위 이름이 없는 경우 전역 범위를 사용하는 것이 명시적 방향입니다. 범위 지정 연산이 없는 경우 가장 가까운 범위에서 함수를 찾습니다. 로컬 범위에 함수가 없는 경우 전역 범위에서 검색이 수행됩니다.

범위 지정 연산은 함수 정의-클래스 멤버에도 사용됩니다.

type Class_name::Function_name(parameters_description)
   {
// 함수 바디
  }

프로그램에서 서로 다른 실행 컨텍스트에서 동일한 이름의 여러 함수를 사용하면 모호해질 수 있습니다. 명시적 범위 지정 없이 함수 호출의 우선 순위 순서는 다음과 같습니다:

  1. 클래스 메서드. 클래스에 지정된 이름의 함수가 설정되어 있지 않으면 다음 수준으로 이동합니다.
  2. MQL5 함수. 언어에 이러한 함수가 없는 경우 다음 단계로 이동합니다.
  3. 사용자가 정의한 전역 함수. 지정한 이름의 함수를 찾을 수 없는 경우 다음 수준으로 이동합니다.
  4. 임포트된 함수. 지정한 이름의 함수를 찾을 수 없으면 컴파일러에서 오류를 반환합니다.

함수 호출의 모호성을 방지하려면 항상 범위 지정 작업을 사용하여 함수 범위를 명시적으로 지정하십시오.

 

예제:

#property script_show_inputs
#import "kernel32.dll"
   int GetLastError(void);
#import
 
class CCheckContext
  {
   int         m_id;
public:
               CCheckContext() { m_id=1234; }
protected:
   int         GetLastError() { return(m_id); }
  };
class CCheckContext2 : public CCheckContext
  {
   int         m_id2;
public:
               CCheckContext2() { m_id2=5678; }
   void        Print();
protected:
   int         GetLastError() { return(m_id2); }
  };
void CCheckContext2::Print()
  {
   ::Print("Terminal GetLastError",::GetLastError());
   ::Print("kernel32 GetLastError",kernel32::GetLastError());
   ::Print("parent GetLastError",CCheckContext::GetLastError());
   ::Print("our GetLastError",GetLastError());
  }  
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   CCheckContext2 test;
   test.Print();
  }
//+------------------------------------------------------------------+

데이터 유형 개체의 크기 또는 크기( sizeof )를 가져오는 연산 #

sizeof 연산을 이용하여 식별자 또는 유형에 해당하는 메모리 크기를 정의할 수 있습니다. sizeof 연산은 다음과 같은 식입니다:

예제:

sizeof(expression)

대괄호로 묶인 모든 식별자 또는 유형 이름을 표현식으로 사용할 수 있습니다. void 유형 이름은 사용할 수 없으며 식별자는 비트 필드에 속하거나 함수 이름이 될 수 없습니다.

식이 정적 배열의 이름(즉, 첫 번째 차원이 주어짐)이면 결과는 전체 배열의 크기(즉, 요소 수와 유형의 길이의 곱)가 됩니다. 표현식이 동적 배열의 이름인 경우(첫 번째 차원이 지정되지 않음) 결과는 동적 배열의 객체 크기가 됩니다.

구조 또는 클래스 유형의 이름 또는 구조 또는 클래스 유형의 식별자에 sizeof를 적용하면 결과물이 구조 또는 클래스의 실제 크기가 됩니다.

예제:

   struct myStruct
     {
      char   h;
      int    b;
      double f;
     } str;
   Print("sizeof(str) = ",sizeof(str));
   Print("sizeof(myStruct) = ",sizeof(myStruct));   

크기는 컴파일 단계에서 계산됩니다.

더 보기

우선 순위 규칙