PROFI에서 SUPERPROFI에 대한 모든 질문 - 1. - 페이지 3

 
거룩한 단순성 (c) Jan Hus
 
Sorento :
거룩한 단순성 (c) Jan Hus

무슨 뜻이에요?
 
drknn :

무슨 뜻이에요?

그렇게 간단하지 않습니다.

이제 함수 내부에서 전달된 변수로 작업합니다.

Mathmech가 가르치는 것처럼 주소에서 의사 변수를 배신했다면 그 안에 있는 모든 기적이 가려졌습니다.

그러나 주소 풀이 상수로 정렬되면 모든 것이 달라집니다.

0은 1이 되고 그 반대도 마찬가지입니다.

;)

 
EA/지표/스크립트에서 주소로 변수를 전달하는 것과 같은 복잡성이 필요한 이유는 무엇입니까? 의사 변수, 주소 풀 및 상수에 의한 정렬이라는 용어는 무엇을 의미합니까?
 
drknn :
EA/지표/스크립트에서 주소로 변수를 전달하는 것과 같은 복잡성이 필요한 이유는 무엇입니까? 의사 변수, 주소 풀 및 상수에 의한 정렬이라는 용어는 무엇을 의미합니까?

컴파일러와 인터프리터는 비슷합니다.

그러므로 생각하십시오.

매개변수(변수)는 어떻게 전달되나요? 그리고 표현식이 함수에 전달되는 경우..

;)

 
Sorento :

나는 나의 의심을 나눌 것이다.

나는 슈퍼 프로에게 집착하지 않고 프로에게 다가가지 않습니다. 아무도 메시지를 읽지 않습니다. 말은 분명합니다.

그러나 코드를 작성할수록(아직 충분하지 않음) 다음과 같은 질문이 발생합니다.

함수에서 매개변수는 어떻게 전달되나요?

(이름으로 또는 가치로?)

문자열 변수를 전달할 때 무모하다는 의혹이 있습니다 ...

;)


저는 저를 프로나 슈퍼프로라고 생각하지 않지만, 답변을 드리겠습니다. :).

MT는 C\C++로 구현되며 개발자는 모호한 경우 이 언어의 표준을 참조할 것을 권장합니다.

C\C++ 표준에 따르면 배열을 제외한 모든 매개변수는 표현식을 포함한 값으로 전달됩니다. 즉, 매개변수의 복사본이 전달됩니다 . 호출된 함수 내부에서 값으로 전달된 매개변수를 변경해도 외부 호출자의 매개변수는 변경되지 않습니다. 변경 사항을 적용하려면 주소에서 참조로 전달해야 합니다. 즉, 변수가 있는 주소가 매개변수로 전달되고 전달됩니다. 그런 다음 이 주소에 있는 값을 변경할 수 있지만 주소 자체는 변경할 수 없습니다. 모든 배열은 참조로 전달됩니다. 즉, 주소는 한 번에 전달됩니다. 그렇지 않으면 엄청난 양의 데이터가 스택을 통해 복사되어야 합니다.

호출된 함수 내에서 참조로 전달된 매개변수를 변경하는 것을 금지하기 위해 C\C++는 const 수정자를 사용합니다.

C\C++에서 문자열은 문자 배열이며 한 가지 차이점이 있습니다. 이러한 배열은 줄 종결자 '\0'으로 끝나야 합니다.

MKL에서 문자열은 예제에 따라 문자열(즉, 문자열 배열 자체)에 대한 포인터와 길이를 포함하는 구조입니다.

C\C++의 예:

 //----
struct MqlStr
  {
   int                len;
   char              * string ;
  };

여기서 char *는 문자형 변수(char형)에 대한 포인터이다. 포인터 유형 자체(char*, int*, double*.......)는 항상 정수입니다. 이것은 셀의 주소입니다. 이것은 변수가 문자열이 아니라 셀의 주소를 저장한다는 것을 의미합니다. 기호 자체의 값은 *string 또는 string[0]을 호출하여 얻을 수 있습니다. 작동하려면 배열이 정적으로 할당되지 않은 경우, 즉 배열의 크기가 설명에 지정되지 않은 경우 항상 메모리를 할당해야 합니다. 예:

문자 스트링[1025] ;

이것은 1025개 요소의 문자 배열입니다.... 마지막 문자가 (string[1024]='\0')이면 이러한 배열은 1024개 문자의 문자열로 처리될 수 있습니다.

그런 다음 문자열의 요소는 일반적인 배열 string[i]의 요소로 얻을 수 있습니다. 동적 배치를 사용하면 라인 아래에 + 1 요소가 할당되고 라인 문자의 끝이 마지막에 추가됩니다 .....

따라서 문자열은 항상 참조로 전달됩니다. 수정이 금지되는지 여부는 MCL의 구현에 따라 다르며 이는 예제로 확인할 수 있습니다. 함수에 문자열을 전달하고 거기에서 값을 변경하고 호출된 함수가 종료된 후 이를 읽습니다(이 값).

행운을 빕니다.

 
VladislavVG :

따라서 문자열은 항상 참조로 전달됩니다. 수정이 금지되는지 여부는 MCL의 구현에 따라 다르며 이는 예제로 확인할 수 있습니다. 함수에 문자열을 전달하고 거기에서 값을 변경하고 호출된 함수가 종료된 후 이를 읽습니다(이 값).

수정을 금지하지 않습니다. 확인했습니다.
 
drknn :

킥애스. 개발자 또는 DLL-ke에 대한 질문처럼 보이지만 모든 것이 정상은 아닙니다. 나는 C ++로 프로그래밍하지 않습니다. 어떻게 든 몇 가지 프로그램을 만들려고했지만 C ++ 쉘이 설치되어있는 동안 모든 것이 저에게 적합하다는 사실을 알게되었습니다. 그러나 어떤 종류의 dll이 없다는 것을 즉시 감지하기 때문에 실행 파일을 다른 컴퓨터로 전송하기만 하면 됩니다. 그리고 저는 문자열로 작업하는 것을 좋아하지 않았습니다. 나는 이 언어를 포기하고 델파이에 머물렀다. 어쩌면 당신은 그것에 자신의 DLL을 만들려고 할 수 있습니다 - 그러한 dll은 내 터미널과 아주 일반적으로 친구입니다 ...

추신

그래서 나는 왜 모든 사람들이 C++를 그렇게 칭찬하는지 이해하지 못했습니다. 이미 이 언어로 프로그래밍하기 위한 셸을 선택하는 수준에 있다면 문제가 있습니다 ...

사실 이러한 라이브러리가 있는 모든 라이브러리와 스크립트는 차트에 수동으로 로드되는 경우 제대로 작동합니다. 현재 프로세스에서 프로그래밍 방식으로 차트에 로드된 경우에도 작동합니다.

문제는 원격 프로세스에서 로드할 때 발생합니다.

=======================================

코드를 다른 컴퓨터로 전송하는 방법에 대해. 디버거 버전을 전송했을 가능성이 큽니다. Studio에서 디버깅을 위한 라이브러리를 가져옵니다. 릴리스를 컴파일해야 했습니다. 그러면 모든 것이 모든 곳에서 작동할 것입니다.

 
헛되이 비유로 불렀습니다.
 
TheXpert :
헛되이 비유로 불렀습니다.

정확히. 처음에는 이 브랜치 이름의 용어조차 놓쳤습니다. 이름이 다르다는 것을 눈치채지 못했습니다. 관심은 이미 특정 패턴에 맞춰져 있습니다.