OOP, mql5의 템플릿 및 매크로, 미묘함 및 사용 기술 - 페이지 17

 
Taras Slobodyanik :

매크로가 값을 반환합니까?

여기 샘플 코드가 있습니다.

 #property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
#define N     0.0
#define S     0


   double Try_helper;
#define Try(EXPR, MES)               \
   Try_helper = EXPR;                \
   if (Try_helper <= 0.0 ) {          \
     printf ( "Error: %s " , MES);      \
     return 4 ;                         \
   }

int OnInit ()
  { int qw=S; 

   return ( INIT_SUCCEEDED );}
  
 
Seric29 :

여기 샘플 코드가 있습니다.

매크로 대체 - 이것은 모든 코드(정의된)가 프로그램의 지정된 위치에서 매번 대체됨을 의미합니다. 즉, 실제로 - 함수를 만들고 호출하는 대신 이 함수를 코드 조각처럼 코드 내부에 여러 번 복사합니다.

매크로에서 반환 을 수행하면 이 매크로가 삽입된 모든 코드에서 반환 됩니다.

 
Taras Slobodyanik :

매크로 대체 - 이것은 모든 코드(정의된)가 프로그램의 지정된 위치에서 매번 대체됨을 의미합니다. 즉, 실제로 - 함수를 만들고 호출하는 대신 이 함수를 코드 조각처럼 코드 내부에 여러 번 복사합니다.

매크로에서 반환 을 수행하면 이 매크로가 삽입된 모든 코드에서 반환 됩니다.

매크로 함수를 작성할 수 없다는 것이 밝혀졌습니다.

 
Seric29 :

매크로 함수를 작성할 수 없다는 것이 밝혀졌습니다.

매크로 대체는 (소스 코드에서) 한 텍스트를 다른 텍스트로 바꾸는 것이므로 정의상 함수가 될 수 없습니다.

 
이 문제에 대한 의견을 작성하십시오. https://www.mql5.com/ru/forum/160683/page945#comment_12958065 (번호 9448)
 

새 줄로 이동하지 않고 2개의 매크로를 작성하는 방법, 이는 줄 수를 크게 증가시켜 프로그램을 크게 늘립니다. 여기에 예가 있습니다.

 #define I int #define B bool //это просто пример ни в коем случае не воспринимайте всерьёз

매크로 B는 더 이상 작동하지 않습니다.

 

변수 이름을 문자열로 변환할 수 있습니까?

다음과 같이 작동하지 않습니다.

 #define p_func(NAME)   Print ( "This is ##NAME" )
//+------------------------------------------------------------------+
void OnStart ()
{
   int QWERTY;
   int zxcvbn;
   p_func(QWERTY);	//This is ##NAME
   p_func(zxcvbn);	//This is ##NAME
}
 
Seric29 :
여러분, 매크로 매크로(a)를 작성하고 싶습니다. 다음과 같이 작동합니다. a가 1이면 매크로는 int 유형의 값을 반환하고, a가 2이면 매크로가 반환됩니다. double 유형의 모든 값, a가 3과 같으면 매크로는 모든 bool 값을 반환합니다. 그렇게 할 수 있습니까?

무엇 때문에? 무엇을 위해? 어디에 쓰실건가요?

 
Igor Makanu :

변수 이름을 문자열로 변환할 수 있습니까?

 #define p_func(NAME)   Print ( "This is " + #NAME)
 
Seric29 :
여러분, 매크로 매크로(a)를 작성하고 싶습니다. 다음과 같이 작동합니다. a가 1이면 매크로는 int 유형의 값을 반환하고, a가 2이면 매크로가 반환됩니다. double 유형의 모든 값, a가 3과 같으면 매크로는 모든 bool 값을 반환합니다. 그렇게 할 수 있습니까?
 #define GET_HELPER_1 1
#define GET_HELPER_2 1.0
#define GET_HELPER_3 true
#define GET_EXPAND(I) GET_HELPER_ ##I
#define GET(I) GET_EXPAND(I)

void OnStart () {
   Alert (GET( 1 ), "  " , GET( 2 ), "  " , GET( 3 ));
}

µl에서는 GET_EXPAND 없이 할 수 있지만 이것은 µl 전용 쓰레기이거나 오히려 그렇습니다. 글쎄, 매크로는 쉼표 연산자가 없기 때문에 매우 제한적입니다(목발을 통해 ...).

추신: 물론 이것은 모두 컴파일 시간입니다.

ZZY: 그런데 캐스트 연산자가 있으면 다음과 같이 할 수 있습니다.

 class Q{
public :
         operator int ();
         operator double ();
         operator bool ();
};
...
Q q;
int i = q;       // call operator int
double d = q;   // call operator double
bool b = q;     // ...