오류, 버그, 질문 - 페이지 1768

 
fxsaber :
이것은 벙어리 컴파일러에서만 가능합니다. 당신 자신이 모든 것을 이해합니다.
C++ 컴파일러는 당신을 위해 생각하지 않을 것입니다.
#include <iostream>
using namespace std;
struct S
{
    S operator +( const S&) {cout << "operator +\n" ; return S{};}
};
S operator "" _s( const char *, size_t) {cout << "literal operator\n" ; return S{};}
int main()
{
    cout << "___literal concatenation example___\n" ;
    S s = "sd" _s "sf" _s;
    cout << "___operator+ example___\n" ;
    S s2 = "sd" _s + "sf" _s;
}
배기가스:
____리터럴 연결 예__
리터럴 연산자
___연산자 + 예시___
리터럴 연산자
리터럴 연산자

연산자 +

보시다시피 + 연산자는 두 번째 경우에 접착으로 대체되지 않았습니다(리터럴에 대해 생성된 후 런타임 추가가 뒤따름). 프로그래머가 너무 많은 가능성을 가지고 있기 때문에 컴파일러는 단순히 그것을 잘라낼 수 없습니다. 이것은 최적화 가능성을 크게 제한합니다. 이것은 물론 ML이 아니며 모든 것이 다를 수 있지만 "일반 컴파일러가 모든 것을 수행합니다"라는 바로 그 진술은 잘못된 것입니다.
 
pavlick_ :
이것은 물론 ML이 아니며 모든 것이 다를 수 있지만 "일반 컴파일러가 모든 것을 수행합니다"라는 바로 그 진술은 잘못된 것입니다.
글쎄요, MQL에는 그러한 연산자가 없기 때문에 그들과 관련된 기회를 갖지 않는 것이 논리적입니다. 나는 컴파일러에 대해 논쟁하지 않을 것이다. 왜냐하면 결코 프로그래머가 아닙니다. 나는 MQL에 대해 조금밖에 모른다.
 

나는 시간과 돈을 낭비하는 것을 주저했습니다. 최적화 프로그램은 마지막 패스에서 멈춥니다. 에이전트는 아무 것도 하지 않으며 모든 것이 승인된 단계에 있습니다. 잡지의 침묵. 최적화 를 다시 시작한 후 모든 것이 처음부터 시작되므로 에이전트를 활성화/비활성화하는 것은 의미가 없습니다.

누가 직면했습니까? 싸우는 방법?

파일:
opt1.png  44 kb
opt2.png  96 kb
opt3.png  88 kb
 

마법의 끈

화면 해상도가 1024x768인 MetaEditor\1495의 작업 순서:

  • 첨부파일 열기
  • 수평 스크롤 슬라이더를 오른쪽으로 끝까지 이동하십시오(그림과 같이).
  • 세 번째 줄에서 마우스로 조각 / * 12345 * /를 선택합니다.
추가 설정: 도구\설정\일반\탭 4자
파일:
Test.mq5  2 kb
 

StringToInteger() 함수를 사용하여 문자열을 숫자로 변환 하려고 할 때 문자열에 숫자가 포함되어 있지 않으면 오류 없이 0이 반환됩니다(GetLastError() = 0). 입력 매개변수에 문자열이 표시되고 사용자가 값을 잘못 지정한 경우 함수는 잘못된 값을 반환하고 오류를 생성하지 않습니다. 이것은 나쁘다.

또한 문자열에 잘못된 숫자 표현이 포함되어 있는 경우(예: 50 대신 50) - 함수는 오류 없이 값 5를 다시 반환합니다. 그리고 여기에서는 0이 아닐 뿐만 아니라 함수가 문자열을 5로 구문 분석했는데, 이는 다시 정확하지 않습니다.

개발자 여러분, 오류 코드를 추가하여 기능을 개선하거나, 파싱이 불가능한 경우 LONG_MAX 값 + 오류를 반환하여 무엇이 잘못되었는지 확인할 수 있도록 기능을 개선하십시오. 이제 이것은 불가능합니다.

스크립트 코드 확인:

#property version    "1.00"
#property script_show_inputs
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input string value= "05" ;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   const long iValue= StringToInteger (value);
   Print ( "iValue = " ,iValue, ", lastError = " , GetLastError ());
  }
//+------------------------------------------------------------------+
 

기능 버전을 구현하십시오 - 10분 이상 걸리지 않습니다.

우리는 시스템 기능의 동작을 변경하지 않을 것입니다.

 
Renat Fatkhullin :

기능 버전을 구현하십시오 - 10분 이상 걸리지 않습니다.

우리는 시스템 기능의 동작을 변경하지 않을 것입니다.

저것들. 기능, 특히 분명히 거짓말을 할 수 있는 기능에 대한 개선이 필요하다고 생각하지 않습니까?

방금 오류 코드 를 추가했더라도 이미 좋을 것입니다. 그렇지 않으면 바퀴를 재발명할 것을 제안합니다. 물론 어렵지는 않지만 자전거입니다.

 
Alexey Kozitsyn :

저것들. 기능, 특히 분명히 거짓말을 할 수 있는 기능에 대한 개선이 필요하다고 생각하지 않습니까?

방금 오류 코드 를 추가했더라도 이미 좋을 것입니다. 그렇지 않으면 바퀴를 재발명할 것을 제안합니다. 물론 어렵지는 않지만 자전거입니다.

수정할 필요가 없습니다. 이들은 wtoi/atoi의 완전한 유사체입니다. 질문이 마감되었습니다.
 

컴파일 중 오류

#include <Math\Stat\Math.mqh>
struct S {};
 
안녕하세요, 메타 트레이더에서 "마침표 구분 기호"를 설정할 수 있는지 알려주실 수 있습니까? 난 그냥 m5에서 촛불 15, 30 및 시간이 끝나는 곳을 볼 수 있기를 원합니다. 그래서 항상 시간을 보지 않으려면 어떻게 할 수 있습니까?
사유: